テーマテンプレート内のストア構成を取得する方法


8

ストア>構成>一般>一般>ストア情報でストアの電話番号設定をテーマのヘッダーに追加しようとしています。モジュールでは、これはgetValue()in を使用して実行できると思います\Magento\Framework\App\Config\ScopeConfigInterfaceが、テーマ内でこれを使用する方法がわかりません。これまでのところ、これをdefault.xmlに追加しました

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

中に電話番号を入れる方法がわかりません phone.phtml

回答:


13

Magento\Framework\View\Element\Templateクラスを拡張する独自のブロックを作成することをお勧めします。

はで宣言されている(クラスの親Magento\Framework\App\Config\ScopeConfigInterface)の一部であるため、カスタムブロックに次の関数を追加できます。Magento\Framework\View\Element\AbstractBlockTemplate$_scopeConfig

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

次に、テンプレートで次のことができます。

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

このようにレイアウトを更新することを忘れないでください:

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

テーマを操作するためにモジュールを作成する必要があることは、それを行うための非常にエレガントな方法のようには見えません(ただし、それが唯一の方法であるように見えます)。確かに、これはテーマを公開しているテーマ開発者に問題を引き起こすでしょう
Alex

@Alexはい、オブジェクトマネージャーを直接使用することは間違いなく簡単ですが、直接使用することはお勧めしません。したがって、2つのオプションがあります。高速で汚れているか、低速できれいです^^
Raphael at Digital Pianism

@Alex Theme開発者は常にテーマ固有のモジュールを使用してテーマを出荷してきましたが、私は問題を知りません。それは実際にはエレガントなソリューションです。テンプレートに多くのPHPコードを含めることはできません。
Fabian Schmengler

6

次のインスタンスを取得することで、テンプレートのストア構成を直接取得できますMagento\Framework\App\Config\ScopeConfig

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

技術的には、誰かがのインスタンスを要求するMagento\Framework\App\Config\ScopeConfigInterfaceと、それにのインスタンスが与えられますMagento\Framework\App\Config\ScopeConfig。たとえば、グリッドモードまたはリストモードのデフォルト設定を取得できます。

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

注: Object Managerを直接使用しないでください。テンプレートをクリーンに保つ必要があります。ブロックに設定を追加してみてください。@Raphaelの回答に従う必要があります。


回答をありがとう、それはあなたの例のようにcatalog / frontend / list_modeで動作しますが、general / store_information / phoneに対してnullを返します
Alex

店舗の電話番号を設定しましたか?:私は店の電話番号を取得することができます\Magento\Framework\App\ObjectManager::getInstance() ->get('Magento\Framework\App\Config\ScopeConfigInterface') ->getValue('general/store_information/phone');
Khoa TruongDinh

[ストア]> [構成]> [一般]> [一般]> [ストア情報]で追加しました。デフォルト値とウェブサイト/ストアを試してみました
Alex

インデックスを再作成してキャッシュをクリアしてください。
Khoa TruongDinh

私はデフォルトの電話番号を取得していますが、ストア/ウェブサイトの設定で設定されたものを無視しています。これを試しましたか?
Alex

2

これをブロックで試してください、多くの検索の後でそれは私のために働いています

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.