Plugins auch im Produktivmodus (HTTP Cache) immer ausführen

Liebes Forum :slight_smile: :slight_smile: ich bin ziemlich verzweifelt. Wenn man den HTTP Cache einschaltet (im Performancemodul „Shop im Produktivmodus verwenden“), dann werden meine Plugins nur einmal beim ersten Aufruf der entsprechenden Seite ausgeführt, bei weiteren Seitenaufrufen nicht mehr. Dann denkt shopware wohl, es ist ja schon abgerufen und hat es im cache. Ich möchte aber bestimmte Dinge bei jedem Seitenaufruf machen, z.B. einen counter, Datenbankzugriffe…) Kann ich shopware irgendwie dazu bringen bestimmte Bootstrap.php (bzw. die Event Listener Funktionen) immer abzuarbeiten, wenn die entsprechende Seite aufgerufen wird? Zum Beispiel habe ich eine Boostrap, die bei einer Kategorieseite aufgerufen werden soll ... public function install() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Listing', 'onPreDispatchListing' ); return true; } Aber diese Funktion wird bei jeder Kategorieseite nur ein mal ausgeführt. Liebe Grüße Kerstin

[quote=“Kerstin83”]Kann ich shopware irgendwie dazu bringen bestimmte Bootstrap.php (bzw. die Event Listener Funktionen) immer abzuarbeiten, wenn die entsprechende Seite aufgerufen wird?[/quote] Nein. Der dispatch Prozess wird überhaupt nicht durchlaufen, wenn die Seite aus dem cache geladen wird. [quote=“Kerstin83”]Ich möchte aber bestimmte Dinge bei jedem Seitenaufruf machen, z.B. einen counter, Datenbankzugriffe…)[/quote] Dann brauchst du ein widget, das du via ESI tag lädst. Siehe http://community.shopware.com/Shopware- … 2F_ESI-Tag Viele Grüße

Vielen Dank :slight_smile: dann weiss ich ja schon einmal woran das liegt. Gibt es vielleicht ein Beispiel Plugin dafür? Mit der Beschreibung kann ich so leider nicht allzuviel anfangen :frowning: LG Kerstin

Mir ist keins bekannt. 1.) Smarty action plugin nutzen: {action module=“widgets” controller=“DeinPlugin” action=“test”} 2.) Deinen widget controller registrieren: Enlight_Controller_Dispatcher_ControllerPath_Widgets_DeinPlugin 3.) Deinen controller schreiben: class Shopware_Controllers_Widgets_DeinPlugin {} 4.) Deine action schreiben: public function testAction() {} Viele Grüße

1 Like

[quote=„Kerstin83“]Gibt es vielleicht ein Beispiel Plugin dafür? Mit der Beschreibung kann ich so leider nicht allzuviel anfangen :([/quote] Meinst Du so etwas? http://shopware-blog.com/eigene-templat … chliessen/ Gruß

1 Like

genau so etwas meinte ich, vielen Dank :slight_smile: Allerdings läuft das Plugin bei mir nicht. Ich habe die entsprechenden Dateien unter den Ordnern erstellt und das Plugin installiert. Das hat geklappt. Habe ich das richtig verstanden, dass ich dann in einer .tpl Datei an beliebiger Stelle diesen Code {action module=widgets controller=ExcludeTemplate action=index} hineinschreiben kann und das gibt dann eine Zufallszahl aus? Also bei mir wird die Seite dann nicht mehr ganz geladen. Woran könnte das liegen?

Hi, durch das Snippet wird ein Subrequest auf Widgets/ExcludeTemplate::indexAction ausgeführt. Den Controller musst du also hinterlegen. Für den Controller benötigst du dann wiederum ein eigenes Template, in dem du bspw. deine Zahl ausgeben kannst. Je mehr du von diesen Subrequests hast, desto weniger effektiv ist das Caching, von daher kann es ggf. auch sinnvoll sein, den fraglichen Controller einfach gar nicht mehr zu cachen. Auch das Anlegen eines komplett eigenen Controllers kann sinnvoll sein, der würde im Standard eh nicht gecacht. Daniel

Hallo, danke. Habe das Plugin jetzt zum Laufen gebracht :slight_smile: War ein hartes Stück Arbeit… [quote]Auch das Anlegen eines komplett eigenen Controllers kann sinnvoll sein, der würde im Standard eh nicht gecacht.[/quote] Wie macht man denn das? Ist das irgendwo beschrieben? LG Kerstin

Hi, eine kl. Übersicht zu Controllern findest du hier: https://developers.shopware.com/develop … ontroller/ Besten Gruß, Daniel

[quote=“Kerstin83”]Habe das Plugin jetzt zum Laufen gebracht :slight_smile: War ein hartes Stück Arbeit…[/quote] Wo war den der Fehler?

lol :slight_smile: :slight_smile: :slight_smile: “War” ist der richtige Tempus. Ist der Beitrag von dir? Und hast du ihn geändert? Ist jetzt nämlich plötzlich richtig. :slight_smile: Ich dachte schon, ich hätte mich vertan. Aber ich hatte die Seite ausgedruckt… LG Kerstin