Moin, ich möchte die Darstellung der Artikel im Listing erweitern, um bestimmte Konfigurationsdaten. Das funktioniert im Normalfall super. Ich greife auf Events zurück, und kann dann die benötigten Daten an den Artikel anhängen. $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Listing', 'onFrontendPostDispatchListing' );
Das funktioniert soweit auch einwandfrei. Jetzt zum eigentlichen Problem: In dem Listing ist das Infinite-Scrolling aktiviert (Shopware 5 Standard). Beim Nachladen wird nun auf ein Widget-Controller zurückgegriffen, den Controller Listing. Dort wird die Action ajaxListingAction aufgerufen. Tendenziell würde ich rein logisch einfach folgendes Event verwenden: $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Widgets\_Listing', 'onFrontendPostDispatchListing' );
Der Controllername ist der gleiche, nur das Modul ändert sich. Das funktioniert so nicht! In der Doku steht auch warum: Die Event Listener sind nur für Frontend und Backend gültig. WARUM? tldr; Welches Event muss ich verwenden um an die ajaxListingAction im Controller Listing im Modul Widgets heranzukommen? Und das PostDispatch, nicht PreDispatch!
Hallo svenfinke, das sollte so jedoch definitiv funktionieren. Das Event, das du gewählt hast, sieht erstmal korrekt aus. Es gibt die PostDispatch-Events durchaus auch für das Widget-Modul. Wo genau steht denn, dass es diese Events nicht geben sollte? Auf jeden Fall befürchte ich da eher einen Fehler in deinem Listener ‚onFrontendPostDispatchListing‘. Prüfst du da ggf. auf das Modul ab, wie bspw. : if ($request-\>getModuleName() != 'frontend) { return; }
Das ist in sehr sehr vielen Plugins der Fall und würde das Problem durchaus erklären. Gruß, Patrick :shopware:
[quote=“Patrick Stahl”] Es gibt die PostDispatch-Events durchaus auch für das Widget-Modul. Wo genau steht denn, dass es diese Events nicht geben sollte? [/quote] Das steht im Wiki. Ich würde die Einträge in der Liste auf jeden Fall so verstehen, das man entweder auf den globalen PostDispatch geht, oder halt [Frontend/Backend]. [quote=“Patrick Stahl”] Auf jeden Fall befürchte ich da eher einen Fehler in deinem Listener ‘onFrontendPostDispatchListing’. Prüfst du da ggf. auf das Modul ab, wie bspw. : if ($request-\>getModuleName() != 'frontend) { return; }
Das ist in sehr sehr vielen Plugins der Fall und würde das Problem durchaus erklären. [/quote] Das hatte ich auch schon geprüft und einfach direkt am Anfang des Listeners mit einem Dump und einem Die eine Ausgabe erzwungen. Allerdings kam da so nichts zurück… Aber in der Zwischenzeit habe ich es mit dem Shopware_Modules_Articles_sGetArticlesByCategory_FilterResult Event gelöst. Da erweitere ich das sArticles Objekt dann einfach. Das funktioniert wunderbar! Trotzdem wäre es für die Zukunft ganz interessant, ob das Post_Dispatch überhaupt für Widget Controller funktioniert. Allerdings hatte ich mich auch mal ein bisschen durch den Source gewühlt und auch nichts gefunden, warum es nicht funktionieren sollte. Da ich mir mit einem anderen Event behelfen konnte markiere ich den Thread trotzdem mal als gelöst.