Pracuję z niestandardowym rozszerzeniem związanym z wieloma stronami internetowymi. Mam do czynienia z problemem, określam kod skryptu do wykonania w panelu administracyjnym, uzyskując identyfikator witryny. Oczekiwałem wyniku website_id
jak 0 (domyślny identyfikator w store_website
tabeli). Ale kiedy korzystam z tej funkcji poniżej, zawsze zwraca 1.
/** @var \Magento\Store\Model\StoreManagerInterface */
$this->_storeManager->getStore()->getWebsiteId(); //return 1, expect 0
$this->_storeManager->getWebsite()->getId(); //return 1
Moje pytanie : Jakikolwiek sposób na uzyskanie
website_id
dostępu do panelu administracyjnego lub zdefiniowanie funkcji uruchamianej wadminhtml
obszarze?Uwaga: Ta funkcja musi działać zarówno w interfejsie użytkownika, jak i w interfejsie użytkownika.
Każda pomoc będzie mile widziana.
Odpowiedzi:
Ogólna idea polega na przekazaniu wybranego zakresu przez parametr żądania.
Myślę, że powinieneś użyć podobnego kodu jak w akcji edycji produktu:
W takim przypadku
$store->getWebsiteId()
powinien być rzeczywisty (wybrany) identyfikator strony internetowej. Można to jednak zrobić tylko w przypadku użycia bloku sklepu, który działa w taki sam sposób, jak standardowy blok magento (aby wybrać zakres sklepu):Oto mój wynik w przykładzie, gdy wybieram domyślny widok sklepu (id == 1):
i tutaj jest domyślny zakres globalny ( Wszystkie wyświetlenia sklepu , identyfikator witryny to 0):
Aktualizacja:
Możesz dodać taką metodę do pomocnika i użyć jej tam, gdzie chcesz:
Wynik powinien wyglądać następująco:
Backend bez selektora zakresu - 0
Kopia zapasowa z selektorem zakresu - wybrany identyfikator witryny lub 0, jeśli nic nie zostało zaznaczone (Wszystkie wyświetlenia sklepu)
Frontend - aktualny identyfikator strony internetowej
Jeśli szukasz krótkiej drogi na froncie:
Możesz użyć
Magento\Store\Model\StoreResolver
klasy do tego celu:Prawidłowo wykrywa aktualnie wybrany widok sklepu w obszarze interfejsu użytkownika, ale jest bezużyteczny dla obszaru administratora.
źródło
website_id = 0