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.