Comment obtenir la configuration du magasin dans un modèle de thème


8

J'essaie d'ajouter la configuration du numéro de téléphone du magasin dans Magasins> Configuration> Général> Général> Informations sur le magasin à l'en-tête de mon thème. Dans un module, je pense que cela pourrait être fait en utilisant getValue()dans \Magento\Framework\App\Config\ScopeConfigInterfacemais je ne vois pas comment utiliser cela à l'intérieur d'un thème. Jusqu'à présent, j'ai ajouté ceci à default.xml

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

mais je ne sais pas comment obtenir le numéro de téléphone à l'intérieur phone.phtml

Réponses:


13

Je vous suggère de créer votre propre bloc, ce qui prolongera la Magento\Framework\View\Element\Templateclasse.

Comme le Magento\Framework\App\Config\ScopeConfigInterfacefait partie de Magento\Framework\View\Element\AbstractBlock(le parent de la Templateclasse) déclaré dans $_scopeConfig, vous pouvez ajouter la fonction suivante à votre bloc personnalisé:

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

Ensuite, dans votre modèle, vous pouvez faire:

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

N'oubliez pas de mettre à jour votre mise en page comme ceci:

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

Devoir créer un module pour travailler avec le thème ne semble pas une manière très élégante de le faire (bien qu'il semble que ce soit la seule façon). Cela va sûrement causer des problèmes aux développeurs de thèmes qui publient des thèmes
Alex

@Alex oui, l'utilisation directe du gestionnaire d'objets est certainement plus facile, mais il n'est pas recommandé de l'utiliser directement. Il y a donc deux options, rapide et sale ou lente et propre ^^
Raphael au Digital Pianism

Les développeurs de @Alex Theme ont toujours livré leurs thèmes avec des modules spécifiques aux thèmes et je ne connais aucun problème. C'est en fait une solution élégante. Avoir beaucoup de code PHP dans les modèles ne l'est pas.
Fabian Schmengler du

6

Nous pouvons obtenir directement une configuration de magasin dans le modèle en obtenant une instance de Magento\Framework\App\Config\ScopeConfig:

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

Techniquement, lorsque quelqu'un demande une instance de Magento\Framework\App\Config\ScopeConfigInterface, nous lui donnerons une instance de Magento\Framework\App\Config\ScopeConfig. Par exemple, nous pouvons obtenir le paramètre par défaut pour le mode grille ou liste:

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

Remarque: éviter d'utiliser directement le gestionnaire d'objets . Nous devons garder nos modèles propres. Essayez d'ajouter la configuration au bloc. Devrait suivre la réponse @Raphael.


Merci pour la réponse, cela fonctionne pour catalog / frontend / list_mode comme dans votre exemple mais retourne null pour general / store_information / phone
Alex

Avez-vous défini le numéro de téléphone de votre magasin? Je peux obtenir le numéro de téléphone du magasin:\Magento\Framework\App\ObjectManager::getInstance() ->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('general/store_information/phone');
Khoa TruongDinh

Ouais, j'ai ajouté dans Magasins> Configuration> Général> Général> Informations sur le magasin. J'ai essayé une valeur par défaut et pour le site Web / magasin
Alex

Veuillez ré-indexer et vider le cache.
Khoa TruongDinh

Je l'ai maintenant en tirant le numéro de téléphone par défaut, mais j'ignore celui défini dans la configuration du magasin / site Web. Avez-vous essayé cela?
Alex

2

Essayez ceci sur Block, cela fonctionne pour moi après de nombreuses recherches

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.