Zusätzlichen Wert in Session legen

Hi Leute, ich habe folgendes Problem. Bei Aufruf von bspw. www.storename.de/?zusatz=test soll die Request Variable „zusatz“ abgefragt werden und MUSS zwingend in die Session gespeichert werden. Diese wird für eine Weiterverarbeitung im Warenkorb benötigt. Problem: Jeder weiß, dass Template und Logik streng voneinander getrennt sind - deshalb möchte ich das ungern über smarty in der Templatedatei des headers erledigen. Wie bekomme ich das also hin? Hat da jemand eine Idee? Viele Grüße

Plugin schreiben :slight_smile: Siehe sonstiges-f58/faq-haufig-gestellte-fragen-t24425.html#p109837 Viele Grüße

1 „Gefällt mir“

Danke für die schnelle Antwort :slight_smile: Ach Mist und anders geht das nicht? Das heißt ich schreibe ein Frontend Plugin?

Das ist im standard so nicht möglich. Also ja - ein frontend Plugin. Viele Grüße

Noch eine Frage: Ich habe ein Event in meinem Plugin registriert. Wie gehe ich sicher, dass dieses Event bei jedem Seitenaufruf ausgeführt wird?

Stellst du ein eigenes event zur Verfügung oder hast du einen listener auf einem Shopware event?! Viele Grüße

Ich habe folgendes Event: public function onPostDispatchFrontend(Enlight\_Event\_EventArgs $arguments) { //hier werden die $\_GET-Variablen geprüft und Session-Values gesetzt }

Dann such dir ein event aus, welches früh genug und auf jeder Seite gefeuert wird. Wenn du natürlich den http cache aktiviert hast, dann wird das event nie geworfen (bzw. nur 1 mal). Viele Grüße

Wird onPostDispatchFrontend nicht auf jeder Seite und bei jedem Aufruf gefeuert?

Hat jemand noch ne Idee, welches Event man da am besten nutzt? Danke! :slight_smile:

Ansonsten würde es auch über eine Controller Action und aktiviertem ESI in der Bootstrap funktionieren.

So, hab eine Lösung gefunden - falls es jemanden interessiert: Möchte man Aktionen bei jedem Seitenaufruf (egal auf welcher Unterseite des Shops) im Frontend durchführen, ist folgender Eventaufruf notwendig: private function registerEvents() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PreDispatch\_Frontend', 'onPreDispatchFrontend' ); } public function onPreDispatchFrontend(Enlight\_Event\_EventArgs $arguments) { //get request or set session }