Como obter loja de configuração dentro de um modelo do tema
-
29-09-2020 - |
Pergunta
Eu estou tentando adicionar o número de telefone a instalação no Lojas > Configuração > Geral > Geral > Armazenamento De Informações para o cabeçalho no meu tema.Em um módulo eu acho que isso pode ser feito usando getValue()
no \Magento\Framework\App\Config\ScopeConfigInterface
mas eu não consigo ver uma maneira de como utilizar esta dentro de um tema.Até então eu adicionei este default.xml
<referenceContainer name="header-wrapper">
<block class="Magento\Framework\View\Element\Template" name="store.phone.number" template="Magento_Theme::phone.phtml" />
</referenceContainer>
mas eu não sei como obter o número de telefone dentro phone.phtml
Solução
Eu sugiro que você crie o seu próprio bloco, que vai estender o Magento\Framework\View\Element\Template
de classe.
Como o Magento\Framework\App\Config\ScopeConfigInterface
é parte de Magento\Framework\View\Element\AbstractBlock
(o pai do Template
classe) declarado na $_scopeConfig
, você pode adicionar a seguinte função para o 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 o seu esquema como este:
<referenceContainer name="header-wrapper">
<block class="Vendor\Module\Block\View\Element\Template" name="store.phone.number" template="Magento_Theme::phone.phtml" />
</referenceContainer>
Outras dicas
Podemos obter diretamente uma loja de configuração no modelo por ficar 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 solicita uma instância de Magento\Framework\App\Config\ScopeConfigInterface
, nós vamos dar-lhe uma instância do Magento\Framework\App\Config\ScopeConfig
.Por exemplo, podemos obter a configuração padrão para a grade ou lista modo:
$productListMode = \Magento\Framework\App\ObjectManager::getInstance()
->get('Magento\Framework\App\Config\ScopeConfigInterface')
->getValue('catalog/frontend/list_mode');
Nota: Evitar o Uso de Gerenciador de objetos diretamente.Devemos manter os nossos modelos de limpar.Tente adicionar config com o bloco.Deve seguir o @Raphael resposta.
Tente isso no Bloco, ele está trabalhando para mim, depois de muitas pesquisa
$isEnabled = \Magento\Framework\App\ObjectManager::getInstance()
->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('seção/grupo/de campo');