So erhalten Sie die Store-Konfiguration in einer Designvorlage

8

Ich versuche, die Telefonnummer des Geschäfts unter Geschäfte> Konfiguration> Allgemein> Allgemein> Geschäftsinformationen zum Header in meinem Thema hinzuzufügen . In einem Modul könnte dies mit getValue()in geschehen, \Magento\Framework\App\Config\ScopeConfigInterfaceaber ich kann nicht sehen, wie dies in einem Thema verwendet werden kann. Bisher habe ich dies zu default.xml hinzugefügt

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

aber ich weiß nicht, wie ich die Telefonnummer hinein bekommen soll phone.phtml

Alex
quelle

Antworten:

13

Ich schlage vor, Sie erstellen einen eigenen Block, der die Magento\Framework\View\Element\TemplateKlasse erweitert.

Da der Magento\Framework\App\Config\ScopeConfigInterfaceTeil von Magento\Framework\View\Element\AbstractBlock(das übergeordnete Element der TemplateKlasse) in deklariert ist $_scopeConfig, können Sie Ihrem benutzerdefinierten Block die folgende Funktion hinzufügen:

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

Dann können Sie in Ihrer Vorlage Folgendes tun:

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

Vergessen Sie nicht, Ihr Layout folgendermaßen zu aktualisieren:

<referenceContainer name="header-wrapper">
      <block class="Vendor\Module\Block\View\Element\Template" name="store.phone.number" template="Magento_Theme::phone.phtml" />
</referenceContainer>
Raphael beim digitalen Pianismus
quelle
Ein Modul erstellen zu müssen, um mit dem Thema zu arbeiten, scheint keine sehr elegante Methode zu sein (obwohl es so aussieht, als wäre es die einzige Möglichkeit). Dies wird sicherlich Probleme für Theme-Entwickler verursachen, die Themes veröffentlichen
Alex
@Alex Ja, die direkte Verwendung des Objektmanagers ist definitiv einfacher, es wird jedoch nicht empfohlen, ihn direkt zu verwenden. Es gibt also zwei Möglichkeiten, schnell und schmutzig oder langsam und sauber ^^
Raphael bei Digital Pianism
@ Alex Theme-Entwickler haben ihre Themes immer mit themenspezifischen Modulen ausgeliefert, und ich kenne keine Probleme. Es ist eigentlich eine elegante Lösung. Viel PHP-Code in Vorlagen zu haben, ist nicht so.
Fabian Schmengler
6

Wir können eine Geschäftskonfiguration direkt in der Vorlage abrufen, indem wir die folgende Instanz abrufen Magento\Framework\App\Config\ScopeConfig:

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

Technisch gesehen, wenn jemand nach einer Instanz von fragt Magento\Framework\App\Config\ScopeConfigInterface, geben wir ihm eine Instanz von Magento\Framework\App\Config\ScopeConfig. Zum Beispiel können wir die Standardeinstellung für den Raster- oder Listenmodus erhalten:

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

Hinweis: Vermeiden Sie die direkte Verwendung von Object Manager . Wir sollten unsere Vorlagen sauber halten. Versuchen Sie, dem Block eine Konfiguration hinzuzufügen. Sollte der @ Raphael-Antwort folgen.

Khoa TruongDinh
quelle
Vielen Dank für die Antwort, es funktioniert für catalog / frontend / list_mode wie in Ihrem Beispiel, gibt aber null für general / store_information / phone zurück
Alex
Haben Sie die Telefonnummer für Ihr Geschäft festgelegt? Ich kann die Telefonnummer des Geschäfts erhalten:\Magento\Framework\App\ObjectManager::getInstance() ->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('general/store_information/phone');
Khoa TruongDinh
Ja, ich habe in Stores> Konfiguration> Allgemein> Allgemein> Store-Informationen hinzugefügt. Versuchte einen Standardwert und für die Website / Shop
Alex
Bitte versuchen Sie, den Cache neu zu indizieren und zu löschen.
Khoa TruongDinh
Ich habe jetzt die Standardtelefonnummer abgerufen, ignoriere aber die in der Store- / Website-Konfiguration festgelegte. Hast du das versucht?
Alex
2

Versuchen Sie dies auf Block, es funktioniert für mich nach vielen Suchen

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

Maaraa
quelle