Core Decorator

Ich möchte folgendes erreichen: in den SEO URLs in der Footer Navigation wird die Kategoriebasis, die in den Verkaufskanaleinstellungen als Einstiegspunkt in die Footernavigation definiert wurde, nicht entfernt. Das führt zum Beispiel zu URIs wie: /deutschland/footer/impressum statt einfach nur /impressum.

Dazu will ich die Klasse \Shopware\Storefront\Framework\Seo\SeoUrlRoute\NavigationPageSeoUrlRoute erweitern und getMapping auch die footerNavigationId an $category->buildSeoBreadcrumb übergeben.

Allerdings erhalte ich folgenden Fehler wenn ich einen Decorator für die Klasse erstelle:

In CheckExceptionOnInvalidReferenceBehaviorPass.php line 86:
                                                                                                                                         
  The service "MyPlugin\Storefront\Framework\Seo\SeoUrlRoute\NavigationPageSeoUrlRoute" has a dependency on a non-existent service "Sh  
  opware\Storefront\Framework\Seo\SeoUrlRoute\NavigationPageSeoUrlRoute.inner".  

Wie ist hier das vorgehen um Corefunktionalitäten zu erweitern?

Meine services.xml:

 

Hallo,

wieso willst du in diesem Fall überhaupt einen Core Service dekorieren?
Wenn du das FooterPageletLoadedEvent abfängst kriegst du als Argument das Event und in diesem Event
kriegst du den Pagelet welchen den Navigationsbaum enthält, den SalesChannel und den Request.
Schau mal in der Datei /vendor/shopware/storefront/Pagelet/Footer/FooterPageletLoader.php in Zeile 36-54 nach hier
siehst du wie die Navigation geladen wird und weiter behandelt wird.

Hoffe das hilft dir weiter.

Grüße Lukaschel
 

1 Like

Hallo Lukaschel,

das ändert ja nichts an den tatsächlichen SEO URLs. Dann kann ich zwar den vorangestellten Pfad (aus meinem Beispiel) “/deutschland/footer” entfernen, sodass lediglich “/impressum” übrig bleibt, diese URL existiert dann faktisch aber nicht. Deswegen muss hier bereits beim Generieren der SEO URLs eingegriffen werden, damit diese auch korrekt in der Datenbank stehen.

An anderer Stelle muss ich ebenfalls die SEO URLs der Produkte ändern. Die benötigten URLs haben das Format “produkt/pullover-weiss-xl”, im URL-Template habe ich aber nur Zugriff auf die optionId und nicht den Namen. Hier muss bei Generierung der SEO URLs die optionId durch den Namen ersetzt werden. Da sehe ich auch keine andere Möglichkeit als in den Core einzusteigen…

So müsste es aussehen

1 Like