Hallo Alle. Ich erweitere gerade eine *.tpl mit {php} (ja, ich weiß, dass {php} als deprecated markiert ist bei smarty :happy: aber es gibt halt keinen Controller für meine Aktion) und dabei ist es mir immer wieder passiert, dass ich eine leere Seite angezeigt bekomme. Meine erste Vermutung war, dass das ein timeout ist (innerhalb des php-Blocks finden DB-Zugriffe statt)…das war’s aber nicht, sondern es ist ganz offensichtlich nur die Größe, die mir zu Schaffen macht. Ich habe einfach mal pseudo code in die *.tpl-Datei eingebaut (jede menge Kommentarzeilen innerhalb eines JavaScript-Blocks) und dabei herausgefunden, dass ab ca. 80KB eine leere weiße Seite an den Browser geschickt wird. Ein timeout kann es nicht sein, da ja überhaupt nichts “läuft” (kein {php}…{/php} o.ä.). Hat irgendjemand eine Ahnung was da passiert und welche Einstellung ggf. angepasst werden muss (“php.ini” respektive “.htaccess”)? Vielen Dank im Voraus
Hallo, du kannst {php} dort gar nicht verwenden! PHP-Code z.B. sollte generell vermieden werden im Template. Besser ist du arbeitest mit Controllern etc., also das du auch die Anpassungen/Eingriffe direkt sauber als Plugin umsetzt. Die Seite kann vermutlich ohne deinen PHP-Teil direkt geladen werden, oder?
Hallo Sebastian. Erst mal vielen Dank für die prompte Antwort. [quote]…du kannst {php} dort gar nicht verwenden![/quote] Also, “gehen” tut das schon :happy: … aber es sollte natürlich vermieden werden, da gebe ich dir Recht. [quote]…Besser ist du arbeitest mit Controllern etc., …[/quote] Für meine Erfordernisse gibt es aber eben keinen Controller (oder aber ich bin zu doof und finde einfach nicht die passende Stelle :oops:) Vielleicht schildere ich mal fix, was ich mache(n will) und DU sagst mir, wo und wie ich mich da in das ganze einbauen kann: Eine *.tpl-Datei wird um JavaScript erweitert, so dass ein control (aus der *.tpl) bei einem Event (onblur=…, onchange=…) eine Funktion aufruft. Die Funktion selber (innerhalb eines JavaScript-tags) ist nicht statisch, sondern baut z.B. nach Datenbankinhalt eine case-Struktur auf. So wie ich es jetzt gelöst habe in der *.tpl-Datei: [code] …
Moin, um was für eine Seite handelt es sich den? Artikeldetailseiten, Kategorieseiten ? Das sollte doch ohne Probleme per Controller gehen, so dass bei jedem Aufruf einer Kategorie oder Artikel dein dynamischer Code erzeugt wird und auf der HTML Seite ausgegeben wird.
Hallo hey, Ottscho. Es geht um die Seite “Zahlungsart ändern” und dafür gibt es eben keinen Controller (zumindest nicht, dass ich wüsste)…oder? Erweitert werden müssen die Dateien debit.tpl und payment_fieldset.tpl… Will
So sollte es gehen: $event = $this-\>createHook( 'Shopware\_Controllers\_Frontend\_Account', 'paymentAction', 'myPaymentAction', Enlight\_Hook\_HookHandler::TypeAfter, 0 ); $this-\>subscribeHook($event);
Wenn du nun hier im Code deine Abfrage machst und diese dann per Smarty Variable im Template zur Verfügung stellst, sollte es eig. klappen.
ich werde das umgehend mal „versuchen“ und anschließend berichten!!! danke erst mal und…bis später :happy:
Das mit dem “umgehend” war ja schon mal 'n guter Ansatz :happy: Ich musste mich jetzt erst mal um ein anderes Projekt kümmern und werde das aber jetzt am Wochenenende machen…
[quote=“ottscho”]So sollte es gehen: $event = $this-\>createHook( 'Shopware\_Controllers\_Frontend\_Account', 'paymentAction', 'myPaymentAction', Enlight\_Hook\_HookHandler::TypeAfter, 0 ); $this-\>subscribeHook($event);
Wenn du nun hier im Code deine Abfrage machst und diese dann per Smarty Variable im Template zur Verfügung stellst, sollte es eig. klappen.[/quote] Wie “sicher” ist das denn, dass ‘Shopware_Controllers_Frontend_Account’/‘paymentAction’ die richtige Object/Methoden-Kombi ist??? Meine Hook-Funktion wird definitiv NICHT aufgerufen wenn ich versuche, sie wie oben beschrieben zu registrieren!? Edit: Proxy löschen bringt’s…
Jepp, man kann Beiträge/Antworten leider nicht löschen, deswegen hatte ich das oben editiert…Das Löschen der Proxies ist „lebenswichtig“ sowie das Speichern der *.tpl-Datei (auch ohne Änderung) damit der Browser-Cache nicht greifen kann… Ich bin soweit, dass das alles „klappt“, allerdings besteht das Größen-Problem immer noch… Ich generiere zu viel JavaScript-Code (das array, das ich erstelle ist zu groß)…ich teile das vielleicht einfach mal auf mehrere auf. Was ich auch nicht hinbekommen habe: Eine einfache Template-Variable anzulegen und die dann in der *.tpl-Datei einzubinden. Ich „behelfe“ mir jetzt, indem ich in der *.tpl einen (leeren) Block definiere, den ich dann in der PHP-Datei ersetze (Dazu gab es halt ein Sample in den Tutorials). Stand jetzt also ist: Ich habe das {php} aus der *.tpl-Datei raus (was ja schon mal viel Wert ist - danke nochmal für deinen Hinweis!!!) und schlage mich jetzt immer noch mit der Größe herum (meine Hoffnung war, dass im PHP-Interpreter/Smarty für php-Dateien andere Gesetze gelten als für tpl-Dateien)… Ich melde mich, sobald ich auch dafür 'ne Lösung habe.
Okay. Nach viel hin und her, weiß ich nun, wie’s geht. Ist dann am Ende doch etwas komplizierter geworden, als ursprünglich gedacht. Das Größenproblem kann ich auch nicht umgehen, indem ich die Arrays aufteile (es geht ja auch nicht um die interne Größe eines Arrays, sondern um die Gesamtgröße der Seite). Einzig: Indem ich die Funktion extern anlege und als *.js-Datei inkludiere kann die Funktion “beliebig” groß werden. Die Aufgabe besteht nun darin, diese *.js-Datei zu generieren (der “Inhalt” der Funktion ist halt dynamisch) was Gott sei Dank nicht bei JEDEM Aufruf der Seite passiert, sondern zyklisch per Useraktion im Backend. Theoretisch gelöst also - muss jetzt nur noch “gemacht” werden :happy: Vielen Dank nochmal!
[quote=“WFreitag”]Okay. Nach viel hin und her, weiß ich nun, wie’s geht. Ist dann am Ende doch etwas komplizierter geworden, als ursprünglich gedacht. Das Größenproblem kann ich auch nicht umgehen, indem ich die Arrays aufteile (es geht ja auch nicht um die interne Größe eines Arrays, sondern um die Gesamtgröße der Seite). Einzig: Indem ich die Funktion extern anlege und als *.js-Datei inkludiere kann die Funktion “beliebig” groß werden. Die Aufgabe besteht nun darin, diese *.js-Datei zu generieren (der “Inhalt” der Funktion ist halt dynamisch) was Gott sei Dank nicht bei JEDEM Aufruf der Seite passiert, sondern zyklisch per Useraktion im Backend. Theoretisch gelöst also - muss jetzt nur noch “gemacht” werden :happy: Vielen Dank nochmal![/quote] Viel Erfolg Es hört sich vor allem kompliziert an…
[quote=“ottscho”]Viel Erfolg Es hört sich vor allem kompliziert an…[/quote] Danke, danke… Aber 1) ist es nicht soooo kompliziert, wie es im ersten Moment scheint (eigentlich mehr “Fleißarbeit”) und 2) lohnt der Aufwand wirklich! Wenn ich mit dem Thema durch bin, wird daraus wohl ein Plugin. Allerdings habe ich da jetzt schon so viel Zeit investiert (und werde für das Backend mind. nochmal genauso viel Zeit investieren müssen), dass es KEIN kostenloses Plugin wird (aber “bezahlbar” - unter 50€ :happy:)… Wenn Interesse besteht, kann ich ja schon mal ein bisschen damit angeben und die Werbetrommel rühren (sind wirklich nützliche Features wie ich finde).
[quote=“WFreitag”]Vielleicht schildere ich mal fix, was ich mache(n will) und DU sagst mir, wo und wie ich mich da in das ganze einbauen kann:[/quote] Ich habe da in den letzten Jahren eine ausgeprägte Plugin/Modul-Allergie entwickelt… Wenn man für jeden Kleinkram (wie hier) ein Plugin anlegt, verliert man leicht den Überblick, und man muss bei jeder Shopware-Installation alle Plugins registrieren. Zur Not kann man das (für die Puristen) auch über eine Smarty-“Function” lösen, ober über ein {include} einer PHP-Datei. Aber so kann ich meine Templates plus Zusatzlösungen dann per “XCOPY-Distribution” verteilen, ohne den Zielserver erst mal konfigurieren zu müssen. Sicher gibt es Aufgabenstellungen, die ohne Plugin/Modul nicht auskommen, ich versuche nur, das auf das Notwendigste zu beschränken. ============ Wundert mich allerdings, dass es da eine Größenbeschränkung für Template-Dateien geben soll… Weil zum Zeitpunkt der Ausführung des (kompilierten) Templates wird ja eine PHP-Datei wie jede andere auch ausgeführt… Obwohl mir gerade einfällt, dass das evtl. der Grund sein kann: der für PHP verfügbare Speicher ist sehr niedrig definiert auf dem Server. Sollte man normalerweise per htaccess ändern können… P.S. Die Vermeidung von Plugins/Modulen zu Gunsten eigener Lösungen hat für mich noch einen ganz anderen Vorteil: Ich kann neue Konzepte mit geringen Änderungen in Shopware, OXID und Gambio GX2 verwenden, ohne das jedes Mal systemspezifisch neu zu machen (bei den unterschiedlichen Ansätzen der Systeme recht aufwändig). Ich habe z.B. die ganzen Slider in Shopware geändert http://www.powertemplate.de/kunden/shop … rtemplate/ und das Konzept mit leichten Änderungen auch schon nach Gambio GX2 übertragen: http://www.powertemplate.de/kunden/tuni … /index.php (Und für OXID kann ich das dann auch analog übertragen.) Demnächst wird Shopware wiederum auf diese Weise von einer Lösung profitieren, die ich für Gambio implementiert habe: eine sehr komfortable Adresseingabe… Einfach mal in http://www.powertemplate.de/kunden/tuni … ccount.php eine deutsche Postleitzahl eingeben, das PLZ-Feld verlassen und staunen…
[quote]Einfach mal in http://www.powertemplate.de/kunden/tuni … ccount.php eine deutsche Postleitzahl eingeben, das PLZ-Feld verlassen und staunen… [/quote] staun… Klasse - jede Taste, die der Kunde hier nicht drücken muss ist Gold wert. [quote]Demnächst wird Shopware wiederum auf diese Weise von einer Lösung profitieren, die ich für Gambio implementiert habe: eine sehr komfortable Adresseingabe…[/quote] …jetzt sag nicht als Plugin Oder doch? Übrigens - auf der Shopseite wird von dem Bildinhalt des ersten Sliders unter dem Nivo nur die obere Hälfte dargestellt (mit FF5). Wenn ich auf „Seite neu laden“ im Browser klicke, ist alles da, lösche ich den Browsercache und lade neu ist wieder nur die Hälfte zu sehen… bei mir wird sporadisch (im FF) der komplette Nivo „vergessen“, drücke ich auf neu laden, ist er wieder da - weisst Du vielleicht was das soll und hat das evtl. die gleiche Ursache? Grüße rattatui
@WFreitag, was macht dein Plugin eigentlich genau? Also Bankdaten prüfen, … ? @avenger gute Idee, die Daten nach PLZ zu suchen. Wo hast du die Daten her?
[quote=„radox“]@avenger gute Idee, die Daten nach PLZ zu suchen. Wo hast du die Daten her?[/quote] Die sind aus http://www.deutschepost.de/dpag?tab=1&s … 15590_3877 abgeleitet. Ist nicht ganz billig…
Ah, Danke. Dachte schon es gibt sowas wie OpenGeoDB mit Straßennamen. Auf jeden Fall nettes Feature. :thumbup:
[quote=“rattatui”]…jetzt sag nicht als Plugin Oder doch? :)[/quote] Nein, sicher nicht… Das wäre auch eher kontraproduktiv, weil das alles über jQuery/AJAX erledigt wird…