Emotion Component Zugriff auf ursprüngliche Request Params

Ich habe ein kleines Problem: Ich habe ein Custom Frontend Emotion Component das auf einer Einkaufswelt platziert ist welche mit parametern aufgerufen wird. Nun ist es ja so dass ich zwar auf das Listing event auf die Parameter mit getSubject()->Request->getParam zugreifen kann, aber da die emotion components per separater Request geladen werden, gehen mir nun die ursprünglichen params verloren.

Frage: Wie kann ich den emotion request für mein custom component so verändern, dass er die ursprünglichen query parameter mit gibt, beispielhaft:

/shopware/widgets/emotion/index/emotionId/13/controllerName/listing

/shopware/widgets/emotion/index/emotionId/13/controllerName/listing?bId=abc wird

Naja da führt kein Weg vorbei, die Paramter in den separaten Request auch zu übergeben. (im Einkaufswelten jQuery Plugin)

Insgesamt klingt das für mich aber nach einer sehr unsauberen Lösung. (Allein, dass du mit einem Requestparameter die EKW-Element beeinflussen willst).
Was genau hast du denn vor? Vielleicht finden wir eine andere Lösung?

Viele Grüße

Ich hab ein EKW-Element dass Katalogseiten anzeigt und kleine Lupen über den Produkten an der passenden Stelle auf den Katalogseitenbildern die ein User anklicken kann und er dann Infos zum Produkt/o.Ä. erhält.

Das wechseln einer Katalogseite von z.B. Seite 10/11 auf Seite 12/13 im EKW-Element, ändert auch das Listing der Artikel je nach dem welche Artikel auf der Seite sind (um ein Neuladen für den User zu verhindern) und je nach dem ob das EKW auf einer Kategorie-Listing platziert wurde etc… 

Das Prinzip dabei funktioniert genau wie das Infinite Scrolling. Zusätzlich greife im PostDispatchSecure_Frontend_Listing ein schaue ob es einen Paramter mit der Katalog-Seiten-Id gibt, wenn ja, sammel ich die passenden Artikel zusammen und liefer Sie initial aus, dadurch erreiche ich eine canonical url, da /kataloge/mein-erster-katalog/?bId=22 immer die gleichen Artikel ausliefert und /katalog/mein-erster-katalog/?bId=23 immer die gleichen Anderen. 
Ich kann daraus auch eine SEO-Url basteln, da ich ne garantierte Auflösug auf nen Kategorie Listing-Controller hab. Wenn keine Kategorie-id dabei ist, wird das normale Kategorie-Listing geladen (sprich keine Artikel, da der Kategorie “mein-erster-katalog” selbst keine Artikel zugewiesen sind, sonst  müsste man 10.000 Produkte zuweisen).

Man kann sogar durch das “abfangen” von Enlight_Controller_Front_RouterShutdown nach einem bestimmten URL Schema schauen z.B. /kataloge/katalog-id oder katalog-seo-name/seitenzahl oder seiten-seo-name/ und sie dann intern per setControllerName, setActionName und setParam an den Frontend/Listing Controller mit der passenden Kategorie ID weiterleiten, dadurch hab ich implizite seo-urls für die einzelnen seiten. Alternativ gehen auch explizite über den SEO Router.

Das klappt soweit auch gut. Nun stehe ich vor dem letzten problem. Wenn nun z.B. die url /kataloge/mein-erster-katalog/seite-15 aufgerufen wird, löst der RouterShutdown das auf, indem er rausfindet, dass “mein-erster-katalog” z.B Kategorie Id 80 ist. Des weiteren findet er auch raus, dass “seite-15” eigentlich Katalogseite-ID 22 ist. Also wird er intern mit setControllerName => Frontend, setActionName => listing, setParam für die Kategorie-Id auf 80 und setParam für die Katalogseiten-Id auf 15 weiterleiten.

 Der normale Listingprozess von Shopware startet und da ich ja mit PostDispatchSecure_Frontend_Listing das Initlial-Listing verändere wenn der Katalogseiten-Id-Parameter vorhanden ist, werden auch direkt die passenden Artikel der Seite 15 (Id 22) angezeigt. Nur eine Sache passt nicht: im EWK weiß er nicht auf welche Seite er direkt Blättern soll, ihm fehlt ja die Katalogseiten-Id Information, welche entweder in der Url stehen oder der Listing Controller weiß, aber durch den nachträglichen Request auf widgets/emotion/… geht die Info verloren.

An deiner Stelle hätte ich einfach einen eigenen Controller verwendet. Dann hättest du wahrscheinlich weniger umbauen müssen. (Oder wäre das wegen einer Anforderung nicht möglich gewesen?)

Wenn du weiterhin die Parameter durchreichen willst, musst du wohl auch das Emotion-jQuery Plugin entsprechend anpassen.

Viele Grüße

Ok ich habs jetzt vorerst mal richtig ekelhaft „gelöst“. Da das EKW-Element eh von nem jQuery Plugin gesteuert wird, schreib ich nen unsichtbares div unter die emotions mit data attributen und das jQuery schaut beim initialisieren nach obs das Element gibt und reagiert dann dementsprechend. Nicht so begeistert, aber besser als die IDs an den widget/emotion controller zu schicken, damit er sie ins template schreib und mir wieder zurückschickt. Obwohl das hätte den Vorteil dass ich per Controller schon die img-srcs der entsprechenden Seite im Template setzen kann statt per jQuery.

@simkli schrieb:

An deiner Stelle hätte ich einfach einen eigenen Controller verwendet. Dann hättest du wahrscheinlich weniger umbauen müssen. (Oder wäre das wegen einer Anforderung nicht möglich gewesen?)

Wenn du weiterhin die Parameter durchreichen willst, musst du wohl auch das Emotion-jQuery Plugin entsprechend anpassen.

Viele Grüße

Gut, hab ja eigene Controller, aber die Vorgabe ist dass der Katalogbetrachter als Einkaufswelten Element gestaltet wird, damit er zusammen mit anderen Einkaufswelten Elementen frei platziert werden kann. Je nach größe und Einstellung des EKWs zeigt es nur das Cover an + download buttons und action buttons. Mehrere Kataloge in nem Slider oder halt nen vollwertigen Betrachter mit klickbaren Produktlupen. Desweiteren soll jede „Katalogseite“ über eine feste Url erreichbar sein und dabei alle Artikel auflisten die sich auf dieser Seite befinden. Dabei darf natürlich kein duplicate content entstehen bei Suchmaschinen und es muss garantiert sein, dass immer die gleichen Artikel bei der gleichen Url sind. Für jede Seite eine Kategorie anlegen fällt zwecks der Menge an Seiten und der Anzahl der Kataloge flach. Außerdem alle Artikel die es in einem Katalog gibt einer Kategorie zuzuordnen fällt ebenfalls wegen der Menge flach. Das Problem ist ja nicht dass ich keine eigenen Controller habe oder dass das ganze nicht funktioniert. Im gegenteil klappt bis jetzt wunderbar und ich sehe auf den ersten Blick keine großen Probleme (zwecks duplicate content, canonical, seo url…), sondern mein einziges „schönheitsproblem“ ist, dass der das Emotion-Lade-System von Shopware die Templates der EKWs erst nachträglich läd über nen ajax Aufruf. Dadurch hatte ich ja das Problem dass das EKW nicht direkt auf Seite 15 blättern konnte, sondern halt das Cover angezeigt hat wenn eine Url mit seite 15 aufgerufen wird. Aber habs jetzt über zwei Ecken gelöst.