Estou trabalhando com uma extensão personalizada relacionada a vários sites. Deparo-me com um problema: defino um código de script a ser executado no Painel de Administração, obtendo o ID do site. Eu esperava resultado website_id
como 0 (ID padrão na store_website
tabela). Mas quando eu uso essa função abaixo, ela sempre retorna 1.
/** @var \Magento\Store\Model\StoreManagerInterface */
$this->_storeManager->getStore()->getWebsiteId(); //return 1, expect 0
$this->_storeManager->getWebsite()->getId(); //return 1
Minha pergunta : Alguma maneira de se atualizar
website_id
no Painel de administração ou definir uma função executada naadminhtml
área?Nota: Esta função precisa funcionar no frontend e no backend.
Qualquer ajuda seria apreciada.
Respostas:
A idéia geral é passar o escopo, escolhido, através do parâmetro request.
Eu acho que você deve usar o código semelhante, como na ação de edição do produto:
Nesse caso,
$store->getWebsiteId()
deve ser o ID do site real (selecionado). Mas isso pode ser feito apenas se você usar o bloco de loja que funciona da mesma maneira que um bloco magento padrão (para selecionar um escopo de loja):Aqui está o meu resultado no exemplo quando eu seleciono a visualização da loja padrão (id == 1):
e aqui está o escopo global padrão ( Todas as visualizações da loja , o ID do site é 0):
Atualizar:
Você pode adicionar um método como este no auxiliar e usá-lo onde quiser:
O resultado deve ser assim:
Back-end sem seletor de escopo - 0
Apoiado com seletor de escopo - ID do site selecionado ou 0 se nada selecionado (Todas as visualizações da loja)
Frontend - ID atual do site
Se você está procurando o caminho mais curto no frontend:
Você pode usar a
Magento\Store\Model\StoreResolver
classe para esse fim:Ele detecta corretamente a visualização da loja atualmente selecionada na área de front-end, mas é inútil para a área de administração.
fonte
website_id = 0