Magento – Storeview / Sprache über URL ändern (Change laguage via URL)

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

Published by Covos

Seit 2009 arbeite ich nun intensiv mit Magento. Begonnen habe ich mit der Erstellung und dem Betrieb von B2C-Shops. Ausgeweitet wurde dies durch meine Tätigkeit im Logistik-Sektor. Hieraus entstanden erste spezialisierte B2E-Systeme. Heute arbeite ich tag-täglich mit spannenden B2C-, B2B- und B2E-Projekten und berichte in diesem Blog über Herausforderungen und gebe Insider-Tipps.

2 comments on “Magento – Storeview / Sprache über URL ändern (Change laguage via URL)”

  1. 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.

Leave a Reply to Covos

Your email address will not be published. Required fields are marked *