Es ist ein viel besprochenes Problem: Wie ändere ich anhand der URL den Storeview oder die Sprache?
Man kann über das Backend verschiedene Storeviews einrichten, die je nach Dropdowneinstellung im Frontend dann Aussehen und/oder Sprache ändern. Schwierig wird es aber, wenn man (auch aus Google Gründen) für einen Storeview eine andere Domain nutzen möchte, als für den anderen View.
So ist die Ausgangslage:
Es soll www.english.com für den englischen Storeview (“english” genutzt werden und
www.deutsch.de für den deutschen Storeview (“deutsch”).
Dass selbstverständlich beide Domains registriert und per cPanel (o.ä.) auf public_html (o.ä.) geroutet werden, setzen wir einmal voraus.
Die beiden Storeviews sind auch eingerichtet und in der Konfiguration > Web ist bei Storeview “deutsch” als Basis URL www.deutsch.de und bei Storeview “english” ist www.english.com hinterlegt (und die anderen URLs).
Nun geht es an die wichtigen Punkte:
1. Index.php: Ansich wird hier nach dem Motto
switch($_SERVER['HTTP_HOST']) { // Deutsch case 'www.deutsch.de': case 'deutsch.de': $_SERVER["MAGE_RUN_CODE"] = "deutsch"; $_SERVER["MAGE_RUN_TYPE"] = "website"; break; // Englisch case 'www.englisch.de': case 'englisch.de': $_SERVER["MAGE_RUN_CODE"] = "englisch"; $_SERVER["MAGE_RUN_TYPE"] = "website"; break; // Ansonsten (default store) default: break; }
vorgegangen. Diese Zeilen zwischen
#ini_set('display_errors', 1);
und
umask(0);
einfügen
Diese Einstellung funktioniert nun für den Fall, dass mit www. und ohne www. die URL aufgerufen wird und es sich um eine Website handelt, die wechseln soll. Soll aber nur ein Storeview aufgerufen werden und keine Website, gibt es das Problem, dass
// English case 'www.english.com': $_SERVER["MAGE_RUN_CODE"] = "english"; $_SERVER["MAGE_RUN_TYPE"] = "storeview"; break;
nicht funktionieren wird, da es bei Magento nicht möglich ist, Storeviews über den Befehl “storeview” aufzurufen. Total unlogisch aber dennoch funktionierend ist diese Version:
// English case 'www.english.com': $_SERVER["MAGE_RUN_CODE"] = "english"; break;
Es wird also einfach die vorletzte Zeile komplett weg gelassen.
Hiernach sollte durch den Wechsel des Storeviews im Frontend möglicherweise schon die URL mitgeändert werden. Auf der anderen Seite aber natürlich auch die angenehme Situation, dass beim Aufrufen der www.english.com der englische Storeview direkt aufgerufen wird.
Sollte es noch nicht funktionieren, muss wahrscheinlich noch eine Kleinigkeit in der .htaccess geändert werden:
RewriteCond %{HTTP_HOST} !^www\.english\.com$ RewriteCond %{HTTP_HOST} !^english\.com$ RewriteCond %{HTTP_HOST} !^www\.deutsch\.de$ RewriteCond %{HTTP_HOST} !^deutsch\.de$ RewriteRule ^(.*)$ http://www.deutsch.de/$1 [L,R=301]
Bei allem ist die Voraussetzung, dass www.deutsch.de und der deutsche Storeview die Haupt- und Grunddomain ist.
Weitere Informationen -auch zu neueren Magento Versionen gibt es in diesem und in diesem Beitrag.
Genutzt in Magento Versionen 1.4.1.0, 1.4.1.1 und 1.5
Hallo,
der Grund ist eine unterschiedliche Namenskonvention in Admin Backend und Code.
Admin | Code
———————
Website | Website
Store | Storegroup
Store View | Store
Store ist also doppelt belegt und kann nur kontextabhängig eindeutig interpretiert werden.
Um nun also den MAGE_RUN_CODE eines store view angeben zu wollen muss MAGE_RUN_TYPE auf “store” gesetzt werden, da wir uns “im Code befinden”.
Zum Glück ist “store” sowieso der default MAGE_RUN_TYPE wenn er leer gelassen wird, deswegen funktioniert das Beispiel auch ohne das der MAGE_RUN_TYPE angegeben wird.
Danke für die Erklärung. Das macht Sinn.