¿Cómo obtener el nombre de la tienda en la plantilla?

13

¿Cómo es posible generar el nombre de la tienda actual en una plantilla personalizada de Magento 2 con un bloque personalizado?

Dominik Barann
fuente
que plantilla ??
Marius
plantilla personalizada utilizando un bloque personalizado
Dominik Barann

Respuestas:

17

necesitas usar la instancia de \Magento\Framework\App\Config\ScopeConfigInterfaceen tu bloque:

Crea el método getStoreName()

public function getStoreName()
{
    return $this->_scopeConfig->getValue(
        'general/store_information/name',
        \Magento\Store\Model\ScopeInterface::SCOPE_STORE
    );
}

y llame a su plantilla echo $this->getStoreName()

Marius
fuente
Parece una gran solución, pero obtengo el siguiente error: Error fatal: Llamar a un despacho de funciones miembro () en un no objeto en /vendor/magento/framework/View/Element/AbstractBlock.php en la línea 637.
Dominik Barann
borrar la carpeta var / generation
Marius
1
El enfoque de @Marius es correcto, pero no funcionó para mí. En lugar de ello he utilizado \Magento\Store\Model\StoreManagerInterface $storeManager en el constructor y public function getStoreName() { return $this->storeManager->getStore()->getName(); } en lugar de getName()que puede utilizar getCode(), getId().
Razvan
9

Use el administrador de la tienda, que contiene información sobre la tienda activa. Si el bloque personalizado no se hereda del Templatebloque, inyecte dependencia \Magento\Store\Model\StoreManagerInterfaceen la construcción.

<?php
namespace VendorName\ModuleName\Block;

class CustomBlock extends \Magento\Framework\View\Element\Template
{
    /**
     * Get current store name.
     *
     * @return string
     */
    public function getCurrentStoreName()
    {
        return $this->_storeManager->getStore()->getName();
    }
}

Luego en plantilla:

<?php
/**
 * @var $block \VendorName\ModuleName\Block\CustomBlock
 */
echo "<h1>Current store name is '{$block->getCurrentStoreName()}'</h1>";
?>
Alex Paliarush
fuente
Gracias por su solución, pero no quiero mostrar el nombre de la vista de la tienda. Busqué el nombre de la tienda de la configuración.
Dominik Barann
4

Para obtener un valor de configuración de tienda como general/store_information/namepuede usar lo siguiente

$config = new \Magento\Framework\App\Config\ScopeConfigInterface();

echo $config->getValue('general/store_information/name');

Sin embargo, hacer esto desde un bloque o ayudante sería más limpio. A continuación se muestra una clase auxiliar que existiría en su propio módulo personalizado

namespace [Namespace]\[Module]\Helper;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    /**
     * Retrieve store name
     *
     * @return string|null
     */
    public function getStoreName()
    {
        return $this->scopeConfig->getValue(
            'general/store_information/name',
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
        );
    }
}

Que inyectarías como dependencia en tu clase de bloque

Sander Mangel
fuente