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

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>

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.


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');

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.