Hallo zusammen, im Rahmen der Inbetriebnahme von Subshops unter verschiedenen Länderdomains für die DACH-Region (d.h. Kategorien und Artikel heißen gleich) ist mir folgender Effekt aufgefallen: Problem: Zunächst war bei der Inbetriebnahme des ersten Subshops als Root-Kategorie zu Testzwecken die Root-Kategorie des Hauptshops eingetragen. Nachdem die Root-Kategorie auf die Kategorie, die auch im Produktivbetrieb genutzt werden soll, umgestellt wurde, wurden plötzlich keine SEO-Routen für die Kategorien dieses Subshops erzeugt. Stattdessen wurde bei Aufruf der erwarteten SEO-URL plötzlich die entsprechende Kategorie des Hauptshops im Design des Subshops angezeigt. Auch ein mehrfaches Neugenerieren der SEO-Routen half hier nicht ab. Erwartet hätte ich folgendes: Shopware + Deutschland [www.meinshop.de] - Kategorie 1 [www.meinshop.de/kategorie1] + Schweiz [www.meinshop.ch] - Kategorie 1 [www.meinshop.ch/kategorie1]
Tatsächlich stellte sich die Angelegenheit aber so dar: Shopware + Deutschland [www.meinshop.de] - Kategorie 1 [www.meinshop.de/kategorie1, www.meinshop.ch/kategorie1] + Schweiz [www.meinshop.ch] - Kategorie 1 [www.meinshop.ch/cat/sCategory/2]
Nach ein wenig wühlen in den Sourcen bin ich schließlich auf die Klasse engine/core/class/sRewriteTable gestoßen. Mir ist aufgefallen, dass hier auch bei Neugenerierung des Index nicht sämtliche bestehenden Routen aus dem System gelöscht werden, sondern nur diejenigen, die offensichtlich ungültig sind. Die Tatsache, dass der Subshop „Schweiz“ inzwischen gar nicht mehr auf die „Deutschland“-Kategorie verweist, hat das System geflissentlich ignoriert und somit die Route der URL /kategorie1 weiterhin auf der gleichnamigen Unterkategorie von „Deutschland“ belassen. Lösung: Ein Leeren der Tabelle s_core_rewrite_urls und anschließende Neugenerierung der SEO-URLs im Backend führten dazu, dass sich der Router wie erwartet verhielt. Change Request: Ich fände es ganz geschickt, wenn die Methode sRewriteTable::sCreateRewriteTableCleanup() nicht nur die ungültigen URLs entfernt, sondern sämtliche Routen des betroffenen Shops entfernt: zumindest müsste das eigentlich eine Option sein, sofern die betreffende Methode tatsächlich nur aus der Index-Neugenerierunge heraus aufgerufen wird - an sonsten müsste von hier aus vielleicht eine neue Methode aufgerufen werden, die dann wirklich komplett aufräumt). An sonsten handelt es sich bei der Funktion „Neugenerierung“ m.E. nicht wirklich um eine echte Neugenerierung, sondern nur um ein „Aufräumen“.