Hallo zusammen, innerhalb des Templates /frontend/index/checkout_actions.tpl (Shopware 4.3.2) möchte ich eine Abfrage nach dem aktuellen (Seiten-)Controller einbauen um einen bestimmten Inhalt nur auf der Startseite ausgeben zu können. Da nun dieses Template via {action module=widgets controller=checkout action=info} geladen wird, steht $Controller in diesem Template nicht zur Verfügung bzw würde immer “checkout” auswerfen. Nun würde ich gern ein kleines Plugin schreiben um die Funktion “infoAction()” aus der Widget-Klasse “Shopware_Controllers_Widgets_Checkout” zu hooken. Ich bräuchte mal einen kleinen Denkanstoß, wie ich $controllerName so fülle, dass mir diese Variable z.B. auf der Startseite mit “index” gefüllt ist? Hier meine bisherige Listener-Funktion im Plugin: public function afterInfoAction(Enlight\_Hook\_HookArgs $arguments) { $controller = $arguments-\>getSubject(); $view = $controller-\>View(); $controllerName = '???'; $view-\>assign('Controller', $controllerName); }
Hallo die onleister, wenn ich das Problem korrekt verstanden habe, dürfte dir folgender Ansatz helfen: Du kannst dem Action-Plugin zusätzliche Parameter übergeben, also bspw.: {action module=widgets controller=checkout action=info currentController=$currentController}
Wir haben hier einen zusätzlichen Paramter currentController, der ist selbst benannt und hat keine Funktionalität im Standard. Der Wert $currentController müss natürlich noch befüllt werden, hier könntest du vermutlich auch $Controller verwenden. Diesen neuen Parameter findest du nun im Request wieder: public function afterInfoAction(Enlight\_Hook\_HookArgs $arguments) { $controller = $arguments-\>getSubject(); $view = $controller-\>View(); $controllerName = $controller-\>Request()-\>getParam('currentController'); $view-\>assign('Controller', $controllerName); }
Hilft dir das weiter? Gruß, Patrick :shopware:
Hallo Patrick, besten Dank für deine schnelle Hilfe. Der Vorschlag passt wunderbar! Falls es noch jemand braucht, hier noch einmal vollständig: Die Einbindung des Widgets erfolgt jetzt so: {action module=widgets controller=checkout action=info currentController=$Controller}
Die Listener-Methode des Plugins sieht so aus: public function afterInfoAction(Enlight\_Hook\_HookArgs $arguments) { $controller = $arguments-\>getSubject(); $view = $controller-\>View(); $request = $controller-\>Request(); $controllerName = $request-\>getParam('currentController'); $view-\>assign('Controller', $controllerName); }
Trotzdem die Frage: Hätte man auch innerhalb der Listener-Methode die Möglichkeit den aktuellen Seiten-Controller abzufragen? Beste Grüße und noch einmal vielen Dank Sebastian
Nein, da die widgets unabhängig von der aktuellen Seite (dem aktuellen controller) geladen werden und diesen überhaupt nicht kennen. Viele Grüße
Ok, vielen Dank euch beiden. Beste Grüße Sebastian