Cómo obtener la configuración de la tienda dentro de una plantilla de tema

8

Estoy tratando de agregar la configuración del número de teléfono de la tienda en Tiendas> Configuración> General> General> Información de la tienda al encabezado de mi tema. En un módulo, creo que esto podría hacerse usando getValue()in \Magento\Framework\App\Config\ScopeConfigInterfacepero no puedo ver una forma de usar esto dentro de un tema. Hasta ahora he agregado esto a default.xml

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

pero no sé cómo obtener el número de teléfono dentro phone.phtml

Alex
fuente

Respuestas:

13

Le sugiero que cree su propio bloque, que ampliará la Magento\Framework\View\Element\Templateclase.

Como Magento\Framework\App\Config\ScopeConfigInterfacees parte de Magento\Framework\View\Element\AbstractBlock(el padre de la Templateclase) declarado en $_scopeConfig, puede agregar la siguiente función a su bloque personalizado:

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

Luego, en su plantilla, puede hacer:

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

No olvide actualizar su diseño de esta manera:

<referenceContainer name="header-wrapper">
      <block class="Vendor\Module\Block\View\Element\Template" name="store.phone.number" template="Magento_Theme::phone.phtml" />
</referenceContainer>
Raphael en Digital Pianism
fuente
Tener que crear un módulo para trabajar con el tema no parece una forma muy elegante de hacerlo (aunque parece que podría ser la única forma). Seguramente esto causará problemas a los desarrolladores de temas que están publicando temas
Alex
@Alex sí, usar el administrador de objetos directamente es definitivamente más fácil, pero no se recomienda usarlo directamente. Así que hay dos opciones, rápida y sucia o lenta y limpia ^^
Raphael en Digital Pianism
Los desarrolladores de @Alex Theme siempre han enviado sus temas con módulos específicos de tema y no conozco ningún problema. En realidad es una solución elegante. Tener mucho código PHP en plantillas no lo es.
Fabian Schmengler
6

Podemos obtener directamente una configuración de tienda en la plantilla obteniendo una instancia de Magento\Framework\App\Config\ScopeConfig:

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

Técnicamente, cuando alguien solicita una instancia de Magento\Framework\App\Config\ScopeConfigInterface, le daremos una instancia de Magento\Framework\App\Config\ScopeConfig. Por ejemplo, podemos obtener la configuración predeterminada para el modo de cuadrícula o lista:

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

Nota: Evitar el uso del Administrador de objetos directamente . Deberíamos mantener nuestras plantillas limpias. Intenta agregar configuración al bloque. Debería seguir la respuesta de @Raphael.

Khoa TruongDinh
fuente
Gracias por la respuesta, funciona para catalog / frontend / list_mode como en su ejemplo, pero está volviendo nulo para general / store_information / phone
Alex
¿Configuró el número de teléfono de su tienda? Puedo obtener el número de teléfono de la tienda:\Magento\Framework\App\ObjectManager::getInstance() ->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('general/store_information/phone');
Khoa TruongDinh
Sí, agregué en Tiendas> Configuración> General> General> Información de la tienda. Intenté un valor predeterminado y para el sitio web / tienda
Alex
Intente volver a indexar y borrar la memoria caché.
Khoa TruongDinh
Ahora tengo que extraer el número de teléfono predeterminado, pero ignora el que está configurado en la configuración de la tienda / sitio web. ¿Has probado esto?
Alex
2

Prueba esto en Block, me está funcionando después de muchas búsquedas

$ isEnabled = \ Magento \ Framework \ App \ ObjectManager :: getInstance ()
-> get ('Magento \ Framework \ App \ Config \ ScopeConfigInterface') -> getValue ('sección / grupo / campo');

Maaraa
fuente