Come ottenere la configurazione del negozio all'interno di un modello di tema


8

Sto cercando di aggiungere l'impostazione del numero di telefono del negozio in Negozi> Configurazione> Generale> Generale> Informazioni negozio nell'intestazione del mio tema. In un modulo penso che questo possa essere fatto usando getValue()in \Magento\Framework\App\Config\ScopeConfigInterfacema non riesco a vedere un modo per usarlo all'interno di un tema. Finora ho aggiunto questo a default.xml

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

ma non so come inserire il numero di telefono phone.phtml

Risposte:


13

Ti suggerisco di creare il tuo blocco, che estenderà la Magento\Framework\View\Element\Templateclasse.

Dato che Magento\Framework\App\Config\ScopeConfigInterfacefa parte di Magento\Framework\View\Element\AbstractBlock(il genitore della Templateclasse) dichiarato in $_scopeConfig, puoi aggiungere la seguente funzione al tuo blocco personalizzato:

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

Quindi nel tuo modello puoi fare:

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

Non dimenticare di aggiornare il layout in questo modo:

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

Dover creare un modulo per lavorare con il tema non sembra un modo molto elegante di farlo (anche se sembra che potrebbe essere l'unico modo). Sicuramente questo causerà problemi agli sviluppatori di temi che pubblicano temi
Alex,

@Alex sì, utilizzare direttamente il gestore oggetti è sicuramente più semplice, ma non è consigliabile utilizzarlo direttamente. Quindi ci sono due opzioni, veloce e sporco o lento e pulito ^^
Raphael al Digital Pianism

Gli sviluppatori di temi @Alex hanno sempre spedito i loro temi con moduli specifici per tema e non conosco alcun problema. In realtà è una soluzione elegante. Avere molto codice PHP nei template non lo è.
Fabian Schmengler,

6

Possiamo ottenere direttamente una configurazione del negozio nel modello ottenendo l'istanza di Magento\Framework\App\Config\ScopeConfig:

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

Tecnicamente, quando qualcuno chiede un'istanza di Magento\Framework\App\Config\ScopeConfigInterface, gli daremo un'istanza di Magento\Framework\App\Config\ScopeConfig. Ad esempio, possiamo ottenere le impostazioni predefinite per la modalità griglia o elenco:

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

Nota: evitare l'uso diretto di Object Manager . Dobbiamo mantenere puliti i nostri modelli. Prova ad aggiungere la configurazione al blocco. Dovrebbe seguire la risposta di @Raphael.


Grazie per la risposta, funziona per catalog / frontend / list_mode come nel tuo esempio ma restituisce null per general / store_information / phone
Alex

Hai impostato il numero di telefono per il tuo negozio? Posso ottenere il numero di telefono del negozio:\Magento\Framework\App\ObjectManager::getInstance() ->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('general/store_information/phone');
Khoa TruongDinh,

Sì, l'ho aggiunto in Negozi> Configurazione> Generale> Generale> Informazioni negozio. Ho provato un valore predefinito e per il sito web / negozio
Alex

Prova a reindicizzare e cancellare la cache.
Khoa TruongDinh,

L'ho preso ora tirando il numero di telefono predefinito ma ignora quello impostato nella configurazione del negozio / sito Web. Hai provato questo?
Alex,

2

Prova questo su Block, funziona per me dopo molte ricerche

$ isEnabled = \ Magento \ Framework \ App \ ObjectManager :: getInstance ()
-> get ('Magento \ Framework \ App \ Config \ ScopeConfigInterface') -> getValue ('section / group / field');

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.