Verschiedene Storeviews oder Websites in Unterordnern

29

Ein Kunde möchte, dass sein Multistore-Shop folgendermaßen eingerichtet wird:

Dies ist ein Beispiel, aber es können noch viele weitere Unterordner vorhanden sein. Was ist der beste Ansatz, um verschiedene Unterordner für verschiedene Geschäftsansichten / Websites zu verwalten?

Ich weiß , dass eine Lösung Unterordner genannt zu erstellen de, enusw. und kopieren Sie die index.php und .htaccess in die entsprechenden Unterordner.

Möglicherweise gibt es auch einige Problemumgehungen (Symlinks für index.php, vHost-Konfiguration anstelle von .htaccess), um die Duplizierung von Dateien zu minimieren, aber ich möchte eine Lösung finden, bei der ich keine Änderungen im Dateisystem vornehmen muss, sondern nur Alles per Konfiguration erledigen.


AKTUALISIEREN

Wir haben mit dem Enterprise-Support festgestellt, dass dies am besten durch das Erstellen von Unterordnern möglich ist.

Am Ende haben wir es so gemacht:

  • Erstellen Sie ein "Sprachordner" -Verzeichnis
  • Erstellt eine Kopie von index.php im Verzeichnis zusammen mit einem angepassten .htaccess und Symlinks zu den Magento-Ordnern (app /, errors /, ...)
  • Symlinks "de", "en" usw. im Magento-Stammverzeichnis erstellt, die auf das Verzeichnis "languagefolders" verweisen

Auf diese Weise können wir eine neue Sprache hinzufügen, indem wir einen neuen Symlink erstellen (zB "fr").

Matthias Zeis
quelle
Wir haben dies nur getan, um festzustellen, dass die Website kein Produkt oder keine Kategorie finden kann (Magento 404 / keine Route zur Seite). Ist Ihnen das auch begegnet?
snh_nl
Nicht so weit ich mich erinnere, sorry. Haben Sie alle Indizes neu erstellt?
Matthias Zeis
Wir verwenden Nginx und ein Update ist erforderlich, damit die Conf funktioniert. Ich werde meinen Kommentar aktualisieren
snh_nl
2 weitere seltsame Dinge. 1) / checkout gibt einen 404 und 2) die Sprachauswahl zurück: Wenn ich auf Englisch klicke, dann klicke ich erneut auf Englisch. Wir sehen, dass der Uri weiterhin / en / en / en / etc hinzufügt. Was haben Sie als Basis-Url gewählt? domain.com/en oder didi Sie behalten es als domain.com
snh_nl
Wir haben domain.com/en/ gewählt.
Matthias Zeis

Antworten:

18

Es ist sehr einfach, mehrere Domains / Pfade basierend auf URLs bereitzustellen. Wie bereits erwähnt, ist die einfachste Einrichtung (nur Konfiguration) möglich, wenn die eindeutigen core/storeCodes im Pfad als Unterordner verwendet werden können . Dies erfordert eine der folgenden Möglichkeiten:

  1. Besucher werden zunächst mit dem richtigen Unterordnerpfad verknüpft
  2. Den Besuchern wird eine Zielseite angezeigt, auf der sie ihren Shop auswählen und einen Cookie erhalten
  3. Ein Mechanismus wird verwendet, um den Ausführungstyp und den Ausführungscode festzulegen, bevor PHP die Antwort verarbeitet

Zu # 3: Seit 1.4 Magento wurde es dem Webserver ermöglicht, den laufenden Kontext ( Website oder Geschäft ) sowie den speziellen Code, der verwendet werden soll, zu bestimmen . Aus index.php :

/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);

Während Umgebungsvariablen verwendet werden, um die Anwendung zu initialisieren, ist es möglich, das System zu beeinflussen, bevor PHP überhaupt hochfährt. Mit Apache und mod_rewritedies kann für Unterordner mit ein bisschen Trick geschehen:

RewriteCond %{REQUEST_URI} ^/de/$
RewriteRule .* - [E=MAGE_RUN_CODE:deutsch]
RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
RewriteRule .* - [E=MAGE_RUN_CODE:%1]

Apache ist nervös mit Umgebungsvariablen und Unterordnern, wie diese hervorragende SO-Antwort zeigt . Die ersten beiden Zeilen ergeben, $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';während die letzten beiden Zeilen die benötigten liefern $_SERVER["MAGE_RUN_CODE"] = 'deutsch';. Es gibt zahlreiche andere Tricks, aber die oben genannten hat mich schon gebissen.

Das Endziel sollte die anfängliche Erkennung sein, soweit dies vernünftig ist (Geoip + Mehrsprachigkeit), während der Benutzer das Store-Cookie festlegen muss, mit dem die Logik bei nachfolgenden Anforderungen umgangen / schrittweise durchlaufen werden kann.

benmarks
quelle
1
Danke, Ben. Auf diese Weise kann ich die Store Views initialisieren, erhalte aber immer die Magento 404-Seite ("Whoops, our bad"). Ich habe die Basis-URL auf domain1.org/en , domain.org/de und so weiter gesetzt. Skin-URL, Medien-URL usw. sind auf domain.org/ (skin | media | ...) eingestellt. Bitte beachten Sie, dass die korrekten Seiten zurückgegeben werden, wenn ich den normalen Ansatz "copy index.php and .htaccess" verwende.
Matthias Zeis
Ich habe diese Antwort akzeptiert, da sie dem, was wir erreichen wollten, am nächsten kommt (auch wenn wir sie für unsere speziellen Anforderungen etwas anders gelöst haben).
Matthias Zeis
Wirklich überrascht, dass die Einstellung "Store Code zur URL hinzufügen" nicht funktioniert hat.
benmarks
Geschäftscodes müssen eindeutig sein. Wie sollte es mit mehreren Store Views funktionieren, die alle mit de /, fr / oder en / enden?
Matthias Zeis
Ich denke , dass ich die replizierten Speicher Codes verpasst, obwohl ich glaube , ich war der Annahme , einige Web - Server-basierte Umschreiben (zB mode_rewrite) , basierend auf HTTP_HOST+ Unterordner Ebene 1.
benmarks
9

Wenn die eingerückten URLs (Unterordner) denselben Namen wie die Geschäftscodes haben können (warum nicht?), Können Sie sie einfach aktivieren Configuration > Web > Url options > Add Store Code to Urls.

Alex
quelle
Richtig, dann brauchen Sie nicht einmal Unterordner. Solange das Umschreiben von URLs aktiviert ist, weiß Magento, dass "en" ein Storeview-Code ist und sucht nicht nach einem Unterordner.
Paul Grigoruta
8
Das Problem bei dieser Lösung ist, dass Magento nur einen Store-Code "de" in einer Magento-Installation zulässt. Wenn Sie also mehrere Websites mit derselben Sprache haben, müssen Sie verschiedene Geschäftscodes verwenden, z. B. de_de, de_en, ...
therouv
2
Rouven hat es verstanden. Das Problem ist, dass Sie nicht mehrere Geschäfte mit demselben Geschäftscode haben können.
Anna Völkl
Ja, das Problem ist, dass Sie - wie Rouven sagte - nicht zwei Geschäftsansichten haben können, die denselben Geschäftscode verwenden.
Matthias Zeis
Ich bestätige, dass Rouven alles richtig gemacht hat. Ein Fehler wurde an Magento gemeldet. Denn in diesen modernen Umgebungen mit mehr Multistoren sollte dies funktionieren. Add store codes to urlGlauben Sie jedoch, dass es möglich wäre, die Einstellung zu einer Storeview-Einstellung zu machen ? magento.stackexchange.com/questions/60686/... = nähme an, es 1 multi mit September - Domänen, die anderen Verwendungen / en und / fr
snh_nl
3

Wir haben genau das getan

Wir haben mit dem Enterprise-Support festgestellt, dass dies am besten durch das Erstellen von Unterordnern möglich ist.

Am Ende haben wir es so gemacht:

  • Erstellen Sie ein "Sprachordner" -Verzeichnis
  • Erstellt eine Kopie von index.php im Verzeichnis zusammen mit einem angepassten .htaccess und Symlinks zu den Magento-Ordnern (app /, errors /, ...)
  • Symlinks "de", "en" usw. im Magento-Stammverzeichnis erstellt, die auf das Verzeichnis "languagefolders" verweisen

Auf diese Weise können wir eine neue Sprache hinzufügen, indem wir einen neuen Symlink erstellen (zB "fr").

Im Backend setzen wir den Store base urlaufdomain.com/en

Wenn Sie nginx verwenden, ist ein Update Ihrer Standortverarbeitung erforderlich, um index.php auch im neuen Unterordner zu verarbeiten. Dies muss für jeden neuen Übersetzungsordner durchgeführt werden

snh_nl
quelle
Gibt es eine Chance, dass Sie erklären, was Ihre letzten 2 Zeilen bedeuten? Ich habe das gleiche Problem wie zuvor, kann es aber nicht verstehen: Wenn Sie nginx verwenden, ist ein Update Ihrer Standortverarbeitung erforderlich, um index.php auch im neuen Unterordner zu verarbeiten. Dies muss für jeden neuen Übersetzungsordner durchgeführt werden. Ich benutze Nginx und ich versuche das gleiche zu tun. Vielen Dank
vbak
location @rewrite { rewrite /(../)? /$1index.php; }
snh_nl
2

Es gibt einen Eintrag in der offiziellen Magento-Wissensdatenbank , der genau das beschreibt.

Wenn Sie mit Apache arbeiten, vergewissern Sie sich, dass alle Virtual Host-Einträge (für jede Domäne) auf dasselbe Dokumentstammverzeichnis verweisen, in dem sich Ihre Magento-Installation befindet. Das gilt für mehrere Domains.

Das Nächste (und Letzte) ist der .htaccess im selben Magento-Installationsordner. .htaccess ist eine leistungsstarke Konfigurationsdatei auf Verzeichnisebene, in der Sie Regeln für jede Serveranforderung festlegen können. Sie müssen dort also alle verschiedenen (Unter-) Domänen- / Ordneraktionen ausführen und die richtigen Servervariablen festlegen, die Magento bei der Initialisierung verwendet.

Nachdem Sie die Serverkonfiguration abgeschlossen haben, müssen Sie in Magento admin (system - configuration - general - web) für jeden Store unterschiedliche Basispfade festlegen.

Befolgen Sie also unbedingt den offiziellen Leitfaden (der auch der bevorzugte Weg ist), und die Dinge sollten reibungslos funktionieren.

Jernej Golja
quelle
1
Die Frage betraf nicht mehrere Domänen.
Fabian Schmengler
Die Frage betraf das Multistore-Setup MIT MEHREREN DOMAINS (.org und .ch sind unterschiedliche Domains). Dies ist jedoch nicht von Bedeutung, da in der angegebenen Antwort eine Lösung für die Einrichtung mehrerer Speicher beschrieben wird, unabhängig davon, ob Sie mehrere Domänen, Unterdomänen oder nur verschiedene Unterordner für jeden Ihrer Speicher haben.
Jernej Golja
1
Der Fokus lag jedoch auf Pfaden für die Store Views, es klang nicht so, als wären die Domains ein Problem. Wie auch immer, nach deiner Bearbeitung habe ich meine Stimme geändert.
Fabian Schmengler
1
Genau, das Problem ist nicht, dass mehrere Domains verwendet werden müssen, sondern dass sich mehrere Stores denselben Pfad / "Unterordner" teilen müssen. Dies ist nicht möglich, indem der URL Geschäftscodes hinzugefügt werden.
Matthias Zeis
-2

Zuerst müssen Sie einige Einstellungen im Magento Admin-Panel vornehmen, dann ein Unterverzeichnis erstellen, die Datei index.php und die Datei .htaccess in das Unterverzeichnis verschieben und kleinere Änderungen an der Datei index.php vornehmen.

Hier finden Sie ein vollständiges Beispiel dafür.

Rangierer
quelle