Hallo Zusammen, ich möchte eine Weiterleitung für Artikel aus einem xtCommerce-Shop mit einer eigenen Frontend-Route auf die aktuellen Artikeldetailseiten weiterleiten. Die alten Links haben folgende Struktur http://www.domain.tld/de/Kategoriename/Artikelname::12345, wobei 12345 die alte Artikel-ID aus dem xtCommerce-Shop ist. Hierzu erstelle ich folgende Frontend-Route für http://www.domain.tld/de. Der Aufruf funktioniert allerdings nur bei http://www.domain.tld/De :shock: $this-\>subscribeEvent( "Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_De", "onEnlightControllerDispatcherControllerPathFrontendXtcredirect" );
Dieser Code funktioniert in beiden Fällen, also http://www.domain.tld/test und http://www.domain.tld/Test $this-\>subscribeEvent( "Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_Test", "onEnlightControllerDispatcherControllerPathFrontendXtcredirect" );
Weiß jemand Rat woran das liegen kann, bzw. wie ich das Problem beheben kann? Ansonsten hole ich über die alte Artikel-ID dann die Shopware-Artikel-ID und möchte dann eine Weiterleitung auf die entsprechende Artikeldetailseite machen. Vielleicht hat jemand ja auch noch einen Hinweis, wie ich an den Link für den Redirect gelangen kann.
Ich kann dir bei deinem Problem nicht helfen - aber ich hatte ein ähnliches. Meine Lösung: da immer erst der Frontend Index geladen wird, habe ich mich dort rangehangen und dann den controller geprüft. private function installSubscribeEvents() { /\* -\> vorher, hatte nicht funktioniert $this-\>subscribeEvent( "Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_ProductInfoPhp", "onGetFrontendControllerProductInfoPhp" ); \*/ $this-\>subscribeEvent( "Enlight\_Controller\_Action\_Init\_Frontend\_Index", "onInitFrontendIndexEvent" ); } public function onInitFrontendIndexEvent(Enlight\_Event\_EventArgs $arguments) { // get the controller $controller = $arguments-\>getSubject(); // get the request $request = $arguments-\>getRequest(); // get the $\_get parameters $params = $request-\>getParams(); // look for xtc links switch ( $params['controller'] ) { // product details case "product\_info.php": // product\_info.php/info/p9890 // product\_info.php/info/p9824\_Artikelname.html $this-\>redirectProductInfo( $controller, $params ); break; // shop content case "shop\_content.php": // shop\_content.php/coID/103/product/Kreditkarte // shop\_content.php/coID/103 $this-\>redirectShopContent( $controller, $params ); break; // etc... case "...": // ... break; } }
Ist natürlich etwas unschön, weil -jede- Anfrage aus dem Shop nun geprüft wird - aber da diese Prüfung nicht besonders teuer ist, sehe ich da kein Problem. Gruß
Hmm, ich habe keine Ahnung, was Du mit Frontend-Route meinst. Eine Weiterleitung der alten XT-URLs auf die neuen SW-URLs? Dazu kannst Du doch ganz einfach die Tabelle s_core_rewrite_urls füttern.
Hallo, hast du evtl. eine Virtuelle URL für den Pfad /de angelegt? Viele Grüße, Benjamin Cremer :shopware:
Danke vorab für eure schnellen Antworten, @keksterrrrr Danke für den Hinweis, werde mir mal ansehen, ob ich das ähnlich umsetzen kann. Melde mich nochmal dazu. @ Frank Leider ist das nur die zweitbeste Option bei ca. 25.000 Artikeln in deutscher und englischer Sprache. @Benjamin Cremer Ich hatte vorher eine virtuelle Route für /de angelegt gehabt, diese aber wieder zugunsten der Programmierung gelöscht.
Hallo, die /de-Routen befinden sich evtl. noch in der s_core_rewrite_urls. Wenn dort du diese URLs entfernst sollte dein Code funktionieren. Viele Grüße, Benjamin Cremer :shopware:
[quote=„Benjamin Cremer“]Hallo, die /de-Routen befinden sich evtl. noch in der s_core_rewrite_urls. Wenn dort du diese URLs entfernst sollte dein Code funktionieren. Viele Grüße, Benjamin Cremer :shopware:[/quote] Hab ich getan, die Route ist in der Tabelle nicht (mehr) vorhanden.
[quote=„gizzzmo“][quote=„Benjamin Cremer“]Hallo, die /de-Routen befinden sich evtl. noch in der s_core_rewrite_urls. Wenn dort du diese URLs entfernst sollte dein Code funktionieren. Viele Grüße, Benjamin Cremer :shopware:[/quote] Hab ich getan, die Route ist in der Tabelle nicht (mehr) vorhanden.[/quote] Ich push das Thema nochmal, ist leider noch nicht erledigt. Wie geschrieben habe ich die genannte Tabelle geprüft, ebenso ist der Pfad in ‚s_core_shops‘ auch nicht angelegt. Wo kann der Fehler sonst liegen? Edit: Ich hab als virtuelle Shop-URL „/d“ angelegt. Diese Route scheint zuerst Beachtung zu finden, d.h. meine „/de“-Route wird nicht mehr ausgeführt (wenn ich die virtuelle Shop-URL ändere funktioniert es). Der Fehler tritt bei allen Routen auf, welche mit der virtuellen Shop-URL behinnen. Gibt es ein alternatives Event auf das ich mich registrieren kann, welches vor der virtuellen Shop-URL gefeuert wird?
Habe das Problem gelöst (Danke an keksterrrrr :thumbup: für den Hinweis) und mich auf das Event “Enlight_Controller_Action_Init_Frontend_Index” registriert. Für alle die es interessiert: Ich hole mir via $controller = $args-\>getSubject(); $request = $args-\>getRequest(); $url = $request-\>getpathInfo();
die aufgerufene URL und separiere die alte xtCommerce-Artikel-ID aus diesem URL-String. Dann hole ich mir die neue Shopware-Artikel-ID (die alten xtCommerce-Artikel-IDs stehen bei mir in einem Attributefeld in s_articles_attributes) und mache einen 301 Redirect auf die URL des neuen Artikels: $shopwarearticle = Shopware()-\>Modules()-\>Articles()-\>sGetArticleById($shopwarearticleid); $newurl=$shopwarearticle ['linkDetailsRewrited']; $controller-\>redirect($newurl, array('code' =\> 301));