Standardmäßig ist URL Key
auf der Produktseite der globale Geltungsbereich festgelegt.
BEARBEITEN: Wie von FlorinelChis vorgeschlagen, kann der Gültigkeitsbereich in Attribute verwalten geändert werden. Dies stört jedoch das Verhalten des Store View Switcher.
Dies wurde am 1.7.0.2 mit Beispieldaten und getestet "Geschäftscode zur URL " aktiviert :
- ein Produkt bearbeiten und eine andere URL für eine bestimmte Storeview festlegen (französisch)
- Neu indizieren
- Öffnen Sie die Produktseite auf der Website in der deutschen Shopansicht
- Wechseln Sie zu Französisch: Die URL der Seite wird angezeigt
/French/
Zurück zu Deutsch wechseln -> 404-Seitenfehler (die URL enthält den Geschäftscode nicht
/default/
wie man es richtig mit Speicheransicht / Sprachumschaltung arbeitet?
Einzelheiten:
- URL für Englisch:
/default/sony-vaio-vgn-txn27n-b-11-1-notebook-pc.html
- URL für Französisch:
/french/sony-vaio-vgn-txn27n-b-11-1-notebook-pc-french.html
Wenn ich auf dieser Seite auf Englisch bin -> /default/sony-vaio-vgn-txn27n-b-11-1-notebook-pc.html
Dann wechsle ich zu französisch:
Ich habe diese URL erhalten ( der Geschäftscode fehlt ):
MAGEDOMAIN/sony-vaio-vgn-txn27n-b-11-1-notebook-pc-french.html
Also schreibt Magento die URL richtig um, aber verpasst aus irgendeinem Grund den Geschäftscode
Referenz:
Dies hängt sicher mit /core/model/store.php
und /core/model/url/rewrite.php
und insbesondere mit diesen Methoden zusammen:
Mage_Core_Model_Url_Rewrite::rewrite
Mage_Core_Model_Store::getCurrentUrl
AKTUALISIEREN
Wenn Sie auf 1.9.1 @Vinai fix sind, funktioniert das nicht, überprüfen Sie die neue Antwort, die ich hinzugefügt habe
Antworten:
Das Problem ist ein Fehler im Modell
Mage_Core_Model_Url_Rewrite_Request
(Magento 1.8) undMage_Core_Model_Url_Rewrite
(früheren Versionen).Der Abschnitt des Kerncodes in 1.8 sieht folgendermaßen aus:
Der Bug: der Wert des Abfrage - Parameters ist der Speicher - Code, (in meinem Fall
de
,en
oderfr
). Die Schlüssel des von zurückgegebenen Arraysapp->getStores()
sind die numerischen Speicher-IDs. Deshalbif (!empty($stores[$fromStore])) {
immer scheitert.Sobald dieser Fehler behoben ist, wird ein weiterer Fehler später in der gleichen Methode angezeigt (ich denke nur in 1.8):
Die Basis-URL des Anforderungsobjekts ist immer die Magento-Basis-URL ohne den Geschäftscode. Indem Sie
$currentStore->getBaseUrl()
stattdessen dort verwenden, wird auch dieser Fehler behoben.Sobald diese beiden Probleme behoben sind, funktioniert der Sprachumschalter einwandfrei. Hier ist eine Erweiterung, die genau das für Magento 1.8 (CE) macht: https://github.com/Vinai/VinaiKopp_StoreUrlRewrites
In Magento 1.7 könnte das Problem etwas anderes sein. Ich dachte immer noch, ich würde diese Antwort hinzufügen, nur für den Fall, dass Google jemand anderen hierher bringt, der 1.8 oder neuer ausführt.
quelle
Tatsächlich habe ich eine Problemumgehung für dieses Problem in Magento 1.7.0.2 gefunden. Wenn Sie Magento 1.8 ausführen, lesen Sie die ausführliche Erklärung von Vinai:
Anscheinend hängt ein Teil des Problems mit dem Anforderungscontroller zusammen
Mage_Core_Controller_Request_Http
.Wenn Sie sich die Zeile 161 ansehen, gibt es diese Bedingung:
Das Auskommentieren behebt den Fehler 404, wenn ich in einer Kategorie / Produktseite zu einem anderen Shop wechsle.
Aus einem unbekannten Grund fehlt jedoch der Geschäftscode in der Antwort-URL. Dies ist jedoch kein Problem mehr, da beide URLs jetzt funktionieren:
Es ist mir noch nicht klar, ob der Kommentar zu diesem Zustand ein anderes Problem verursachen kann
quelle
Mage_Core_Controller_Request_Http
kann in einem Modul nicht umgeschrieben werden.Einige aktualisierte Informationen für Magento 1.9.1
Der Fehler, auf den @Vinai hingewiesen hat, sieht in dieser Version ohnehin behoben aus. Andernfalls ist die Funktionalität immer noch defekt (für konfigurierbare Produkte).
Das eigentliche Problem ist wahrscheinlich hier,
Mage_Catalog_Model_Resource_Url
aber ich habe keine Zeit und möchte einen so heiklen Teil des Kerns nicht berühren.Erläuterung zur Problemumgehung:
Der Einstiegspunkt ist immer diese Klasse
Mage_Core_Model_Url_Rewrite_Request
und insbesondere die Methode_rewriteDb()
Wie
_rewriteDb()
funktioniert das?(139):
$this->_rewrite->loadByRequestPath($requestCases);
___from_store
Parameter hat(142):
if (!$this->_rewrite->getId() && $fromStore) {
___from_store
:(152):
$this->_rewrite->setStoreId($fromStoreId)->loadByRequestPath($requestCases);
id_path
lädt es das für den aktuellen Laden:(159):
$this->_rewrite->setStoreId($currentStore->getId())->loadByIdPath($this->_rewrite->getIdPath());
Alles sieht gut aus, aber es gibt ein Problem mit den url_rewrite-Daten und damit mit der Indexfunktionalität (zumindest für konfigurierbare Produkte):
Das Problem ist, dass dieses Umschreiben auf die falsche
id_path
Produkt-ID verweist (anstatt auf die konfigurierbare Produkt-ID zu verweisen, wird auf eine der einfachen Produkt-IDs verwiesen).Nun besteht eine
!$this->_rewrite->getId()
Problemumgehung darin, die Bedingung zu entfernen. Daher versucht Magento, eine Umleitung immer dann zu finden, wenn ein$fromstore
Parameter vorhanden istcatalog_url
Index zu reparieren und das falsche Neuschreiben zu entfernen, das er erstellt.Hier der Code für die schnelle Problemumgehung (Sie müssen ein Modul erstellen und die
Mage_Core_Model_Url_Rewrite_Request
Klasse selbst neu schreiben ):quelle
Der URL-Schlüssel ist ein Attribut. Sie können es bearbeiten über: Katalog -> Attribute -> Attribute verwalten . Suchen Sie nach url_key und klicken Sie darauf.
Ändern Sie den Bereich und speichern Sie.
Jetzt können Sie in jeder Geschäftsansicht unterschiedliche URL-Schlüssel für Produkte festlegen.
quelle
Sie möchten also die URL für jede Geschäftsansicht ändern?
Derzeit haben Sie die Produkt-URL im Bewertungsbereich für Ihr französisches Geschäft so geändert, dass sie sich von Ihrem englischen Geschäft unterscheidet. Und wenn Sie zwischen den beiden wechseln, erhalten Sie eine 404. Dies wäre zu erwarten.
Magento speichert keine unterschiedlichen URL-Änderungen für andere Store-Ansichten. Wenn Sie also
/french/product1
auf den französischen Store klicken, wird die URL in der Tabelle übereinstimmen und geladen. Aber wenn Sie es im englischen Laden treffen, wird es keine Übereinstimmung geben und somit 404.Es hört sich so an, als müssten Sie nur "Geschäftscodes zur URL hinzufügen" - damit bleiben Ihre URL-Schlüssel in Ruhe, aber allen entsprechenden URLs wird Ihr Geschäftscode vorangestellt. Dies sollte dann ermöglichen, dass Ihr Store Switcher funktioniert.
quelle