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

Alex
la source

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>
Raphael chez Digital Pianism
la source
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.

Khoa TruongDinh
la source
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');

Maaraa
la source