Como obter o nome da loja no modelo?

13

Como é possível gerar o nome da loja atual em um modelo personalizado Magento 2 com um bloco personalizado?

Dominik Barann
fonte
qual modelo ??
Marius
modelo personalizado usando um bloco personalizado
Dominik Barann

Respostas:

17

você precisa usar a instância de \Magento\Framework\App\Config\ScopeConfigInterfaceno seu bloco:

Crie o método getStoreName()

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

e chame seu modelo echo $this->getStoreName()

Marius
fonte
Loos como uma ótima solução, mas recebo o seguinte erro: Erro fatal: Chame uma função de membro dispatch () em um não-objeto em /vendor/magento/framework/View/Element/AbstractBlock.php na linha 637.
Dominik Barann
limpe a pasta var / generation
Marius
1
A abordagem da @Marius está certa, mas não funcionou para mim. Em vez disso eu usei \Magento\Store\Model\StoreManagerInterface $storeManager no construtor e public function getStoreName() { return $this->storeManager->getStore()->getName(); } , em vez de getName()você pode usar getCode(), getId().
Razvan
9

Use o gerente da loja, que contém informações sobre a loja ativa. Se o bloco personalizado não for herdado do Templatebloco, injete dependência \Magento\Store\Model\StoreManagerInterfacena construção.

<?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();
    }
}

Em seguida, no modelo:

<?php
/**
 * @var $block \VendorName\ModuleName\Block\CustomBlock
 */
echo "<h1>Current store name is '{$block->getCurrentStoreName()}'</h1>";
?>
Alex Paliarush
fonte
Obrigado pela sua solução, mas não quero mostrar o nome da visualização da loja. Pesquisado pelo nome da configuração.
Dominik Barann
4

Para obter um valor de configuração da loja como general/store_information/namevocê pode usar o seguinte

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

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

No entanto, fazer isso de um bloco ou auxiliar seria mais limpo. Abaixo está uma classe auxiliar que existiria em seu próprio 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 você injetaria como dependência em sua classe de bloqueio

Sander Mangel
fonte