Ich verzweifle gerade nach über einem halben Tag Debugging völlig: ich habe mehrere Kategorien mit Einkaufswelten - die Anzeige der Einkaufswelten ist dabei an Customer Streams gekoppelt. Die Einkaufswelten werden aber nicht angezeigt, auch wenn der eingeloggte Benutzer in einem der passenden Customer Streams enthalten ist.
Den technischen Grund habe ich gefunden: im Listing Controller (Shopware/Controllers/Frontend/Listing) gibt es die Bedingung:
Die wäre ja nun immer dann wahr, wenn es eine Customer-Stream-abhängige EKW gibt und der Parameter sPage nicht gesetzt ist. In meinem internen Testshop ist das auch immer so. Auch bei einer komplett neu angelegten Kategorie ist das so. Aber bei allen bereits vorhandenen Kategorien (habe heute ein Update auf die aktuellste Version gemacht, da ich den Fehler zuerst nicht finden konnte) ist sPage immer bereits beim Aufruf der Kategorie “1”.
Ich habe schon versucht, den Weg des Requests nachzuvollziehen und habe testweise den HTTP Cache deaktiviert, aber das hat alles keine Änderung gebracht. Es bleibt immer dabei, dass der Parameter einfach “plötzlich da ist” und deshalb die EKW nicht angezeigt wird. Das ist übrigens natürlich sowohl beim Aufruf über die SEO-URL der Kategorie als auch beim Aufruf über den Pfad /frontend/listing/index/sCategory/[KategorieID] so.
Danke für die Antwort, aber da wurde nichts verändert. Zudem ist das Problem ja, dass der Parameter einfach „auftaucht“. Selbst wenn ich ein Mapping auf „tolleSeitenzahl“ erstellt hätte dürfte der Parameter doch nur dann auftauchen, wenn auch „tolleSeitenzahl“ in der URL angegeben wird, oder?
Wie gesagt: ironischerweise ist der Parameter bei einer neu angelegten Kategorie auch nicht vorhanden, ich kann aber auch in der Datenbank keinen Unterschied zwischen den Kategorien ausmachen. Gibt es evtl. noch irgendwelche Caches, die Parameter mitspeichern? Ich habe zwar schon alle Caches gelöscht (auch über die Kommandozeile), einmal sogar /var/cache/production… komplett gelöscht und wie gesagt versuchsweise auch den HTTP Cache deaktiviert (mehr aus Verzweiflung als dem Glauben, dass das einen Effekt haben würde), aber das hat alles nichts geändert.
Vielleicht ist das noch interessant / relevant: ich habe mal versucht, die Parameter des Requests im Router auszugeben (einfach mit einem var_dump($request->getParams()); in der route-Methode, nachdem die Matcher aufgerufen wurden). Auf der „neuen“ Seite erhalte ich dann ganz oben:
[EDIT] Ich dachte auf der vorhandenen Seite käme die Ausgabe nicht, das war aber ein Irrtum (vermutlich war mir jemand mit einem Request „dazwischengekommen“). Die Ausgabe ist dort identisch, d.h. an der Stelle ist der Parameter noch nicht vorhanden. Prüfe ich die Parameter des Request-Objekts aber im Listing Controller, ist der „unerwünschte“ Parameter da.
So, Ursache gefunden. Ist tatsächlich ein Bug in Shopware - der tritt aber nur unter ganz bestimmten Umständen auf (ich mache gleich noch einen Bug Report). Die Ursache und mögliche Workarounds - falls es nochmal jemand brauchen sollte:
Das Problem tritt auf, wenn:
man in einer Kategorie nur EKWs mit Customer Stream Bezug hat
man die Option „Direkt auf Detailseiten springen, falls nur ein Artikel vorhanden ist“ ist in „Grundeinstellungen“ > „Storefront“ > „Kategorien / Listen“ aktiviert hat
In dem Fall werden die EKWs einfach gar nicht angezeigt. Mögliche Workarounds sind aber (wie man sich denken kann) letztendlich einfach:
die Option „Direkt auf Detailseiten springen, falls nur ein Artikel vorhanden ist“ ist in „Grundeinstellungen“ deaktivieren (hat der Kunde aktiviert - ich persönlich finde, wenn in einer Kategorie nur ein Artikel ist, ist sowieso was falsch )
der Kategorie eine EKW ohne Customer Stream Bezug zuordnen. Die darf (zumindest in aktuellen Shopware-Versionen) auch ruhig leer sein. Alternativ kann man (um den Source “sauber” zu halten) die leere EKW auch von der Customer Stream EKW überschreiben lassen.
Viel Arbeit für ein ganz kleines Detailproblem - aber so ist das halt manchmal