Я работаю с пользовательским расширением, связанным с несколькими сайтами. Я сталкиваюсь с проблемой, определяю код скрипта, выполняемого в панели администратора, получая идентификатор веб-сайта. Я ожидал, что результат, website_id
как 0 (идентификатор по умолчанию в store_website
таблице). Но когда я использую эту функцию ниже, она всегда возвращает 1.
/** @var \Magento\Store\Model\StoreManagerInterface */
$this->_storeManager->getStore()->getWebsiteId(); //return 1, expect 0
$this->_storeManager->getWebsite()->getId(); //return 1
Мой вопрос : Есть ли способ получить текущую информацию
website_id
в панели администратора или определить функцию запуска вadminhtml
области?Примечание. Эта функция должна работать как во внешнем, так и во внутреннем интерфейсе.
Любая помощь будет оценена.
Ответы:
Общая идея состоит в том, чтобы передать выбранную область через параметр запроса.
Я думаю, что вы должны использовать подобный код, как в действии редактирования продукта:
В этом случае
$store->getWebsiteId()
должен быть актуальный (выбранный) идентификатор сайта. Но это может быть сделано только в том случае, если вы используете блок хранилища, который работает так же, как стандартный блок magento (для выбора области хранилища):Вот мой результат в примере, когда я выбираю представление магазина по умолчанию (id == 1):
и здесь для глобальной области видимости по умолчанию ( Все Представления Магазина , идентификатор веб-сайта 0):
Обновить:
Вы можете добавить такой метод в помощник и использовать его там, где хотите:
Результат должен быть таким:
Бэкэнд без селектора области видимости - 0
Поддерживается селектором области действия - выбранный идентификатор веб-сайта или 0, если ничего не выбрано (все представления магазина)
Frontend - текущий идентификатор сайта
Если вы ищете короткий путь на фронтэнде:
Вы можете использовать
Magento\Store\Model\StoreResolver
класс для этой цели:Он правильно определяет текущий выбранный вид магазина в области интерфейса, но бесполезен для области администратора.
источник
website_id = 0