Ich arbeite mit einer benutzerdefinierten Erweiterung, die sich auf mehrere Websites bezieht. Ich habe ein Problem. Definieren Sie einen Skriptcode, der im Admin-Bereich ausgeführt wird, indem Sie die Website-ID abrufen. Ich habe ein Ergebnis website_id
wie 0 erwartet (Standard-ID in der store_website
Tabelle). Wenn ich diese Funktion unten verwende, wird immer 1 zurückgegeben.
/** @var \Magento\Store\Model\StoreManagerInterface */
$this->_storeManager->getStore()->getWebsiteId(); //return 1, expect 0
$this->_storeManager->getWebsite()->getId(); //return 1
Meine Frage : Gibt es eine Möglichkeit,
website_id
im Admin-adminhtml
Bereich auf den neuesten Stand zu kommen oder eine Funktion zu definieren, die im Bereich ausgeführt wird?Hinweis: Diese Funktion muss sowohl im Frontend als auch im Backend funktionieren.
Jede Hilfe wäre dankbar.
Antworten:
Die allgemeine Idee besteht darin, den ausgewählten Bereich über den Anforderungsparameter zu übergeben.
Ich denke, Sie sollten den ähnlichen Code wie in der Produktbearbeitungsaktion verwenden:
In diesem Fall
$store->getWebsiteId()
sollte die tatsächliche (ausgewählte) Website-ID angegeben werden. Dies ist jedoch nur möglich, wenn Sie den Speicherblock verwenden, der auf die gleiche Weise wie ein Standard-Magento-Block funktioniert (um einen Speicherbereich auszuwählen):Hier ist mein Ergebnis im Beispiel, wenn ich die Standardspeicheransicht (id == 1) auswähle:
und hier ist für den globalen Standardbereich ( Alle Geschäftsansichten , Website-ID ist 0):
Aktualisieren:
Sie können eine solche Methode in den Helfer einfügen und dort verwenden, wo Sie möchten:
Das Ergebnis sollte folgendermaßen aussehen:
Backend ohne Scope Selector - 0
Unterstützt mit Scope Selector - ausgewählte Website-ID oder 0, wenn nichts ausgewählt ist (Alle Store-Ansichten)
Frontend - aktuelle Website-ID
Wenn Sie nach dem Kurzweg im Frontend suchen:
Sie können die
Magento\Store\Model\StoreResolver
Klasse für diesen Zweck verwenden:Es erkennt die aktuell ausgewählte Store-Ansicht im Frontend-Bereich korrekt, ist jedoch für den Admin-Bereich unbrauchbar.
quelle
website_id = 0