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

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>

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.


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');

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.