Como obter a configuração da loja dentro de um modelo de tema

8

Estou tentando adicionar a configuração do número de telefone da loja em Lojas> Configuração> Geral> Geral> Informações da loja ao cabeçalho do meu tema. Em um módulo Eu acho que isso poderia ser feito usando getValue()em \Magento\Framework\App\Config\ScopeConfigInterfacemas eu não posso ver uma maneira como usar isso dentro de um tema. Até agora eu adicionei isso ao default.xml

 <referenceContainer name="header-wrapper">
      <block class="Magento\Framework\View\Element\Template" name="store.phone.number" template="Magento_Theme::phone.phtml" />
 </referenceContainer>

mas não sei como colocar o número de telefone phone.phtml

Alex
fonte

Respostas:

13

Sugiro que você crie seu próprio bloco, o que estenderá a Magento\Framework\View\Element\Templateclasse.

Como Magento\Framework\App\Config\ScopeConfigInterfaceé parte de Magento\Framework\View\Element\AbstractBlock(o pai da Templateclasse) declarado em $_scopeConfig, você pode adicionar a seguinte função ao seu bloco personalizado:

public function getConfig()
{
    return $this->_scopeConfig;
}

Em seguida, no seu modelo, você pode fazer:

$block->getConfig()->getValue('value/you/need');

Não se esqueça de atualizar seu layout assim:

<referenceContainer name="header-wrapper">
      <block class="Vendor\Module\Block\View\Element\Template" name="store.phone.number" template="Magento_Theme::phone.phtml" />
</referenceContainer>
Raphael na Digital Pianism
fonte
Ter que criar um módulo para trabalhar com o tema não parece uma maneira muito elegante de fazê-lo (embora pareça ser o único). Certamente isso vai causar problemas para desenvolvedores de temas que estão publicando temas
Alex
@ Alex: Sim, usar o gerenciador de objetos diretamente é definitivamente mais fácil, mas não é recomendável usá-lo diretamente. Portanto, há duas opções, rápida e suja ou lentas e limpas ^^
Raphael em Digital pianismo
Os desenvolvedores do @Alex Theme sempre enviaram seus temas com módulos específicos de temas e não conheço nenhum problema. Na verdade, é uma solução elegante. Ter muito código PHP em modelos não é.
Fabian Schmengler
6

Podemos obter diretamente uma configuração de loja no modelo obtendo uma instância de Magento\Framework\App\Config\ScopeConfig:

 \Magento\Framework\App\ObjectManager::getInstance()
  ->get('Magento\Framework\App\Config\ScopeConfigInterface')
  ->getValue('value/you/need');

Tecnicamente, quando alguém pede uma instância de Magento\Framework\App\Config\ScopeConfigInterface, daremos uma instância do Magento\Framework\App\Config\ScopeConfig. Por exemplo, podemos obter a configuração padrão para o modo de grade ou lista:

$productListMode = \Magento\Framework\App\ObjectManager::getInstance()
   ->get('Magento\Framework\App\Config\ScopeConfigInterface')
   ->getValue('catalog/frontend/list_mode');

Nota: Evitando o uso do Object Manager diretamente . Devemos manter nossos modelos limpos. Tente adicionar a configuração ao bloco. Deve seguir a resposta @Raphael.

Khoa TruongDinh
fonte
Obrigado pela resposta, ele funciona para catálogo / frontend / list_mode como no seu exemplo, mas está retornando nulo para geral / Store_Information / telefone
Alex
Você definiu o número de telefone da sua loja? Posso obter o número de telefone da loja:\Magento\Framework\App\ObjectManager::getInstance() ->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('general/store_information/phone');
Khoa TruongDinh
Sim, eu adicionei em Lojas> Configuração> Geral> Geral> Informações da loja. Tentou um valor padrão e para o site / loja
Alex
Tente reindexar e limpar o cache.
precisa saber é o seguinte
Eu tenho que puxar o número de telefone padrão agora, mas está ignorando o definido na configuração da loja / site. Você já tentou isso?
Alex
2

Tente isso no Block, ele está funcionando para mim depois de muitas pesquisas

$ isEnabled = \ Magento \ Framework \ App \ ObjectManager :: getInstance ()
-> get ('Magento \ Framework \ App \ Config \ ScopeConfigInterface') -> getValue ('seção / grupo / campo');

Maaraa
fonte