Magento 2検索設定ガイドを読んで、詳細情報を得てください。
この投稿では、Magento 2で現在のストアをプログラムで取得する方法について説明します。PHPスクリプトやMagento 2モジュールを作成する際には、どのストアが現在アクティブであるか(このスクリプトが呼ばれる)を確認し、そのストアで値を取得または変更する必要があります。これは以下のコードで実行できます。
現在のストアは、Store Manager Interfaceを注入するすべてのクラスで取得できます。現在のストアマネージャーから、ストア関連の情報をすべて取得できます。オブジェクトは、各ストアのフロントエンドやバックエンドから呼び出すと異なります。このコードは、ストアマネージャーインターフェースを注入するシンプルなクラスの作成方法を示しています:
<?php namespace MyCompany\MyModule\Block; class MyModel extends \Magento\Framework\View\Element\Template { protected $_storeManager; public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, array $data = [] ) { $this->_storeManager = $storeManager; parent::__construct($context, $data); } /** * ストア識別子を取得 * * @return int */ public function getStoreId() { return $this->_storeManager->getStore()->getId(); } }
メソッドgetStoreId()は、現在のアクティブなMagento 2ストアのIDを返します。
このコードがadminhtmlコンテキストから呼ばれたかどうかを確認したい場合、もうisAdmin()は使用できません(これはMagento 1では一般的なオプションでした)。これを確認する必要がある場合は、\Magento\Framework\App\Stateクラスに基づくメソッドを使用できます。これを注入し、getAreaCodeを呼び出して、このクラスがadminhtmlまたはフロントエンドから呼び出された情報を取得します。このための簡単なif文は次のようになります:
if ($this->state->getAreaCode() == \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE) { // adminhtmlの場合のTodo }
これにより、エリアコードがadminhtmlと等しいかどうかがチェックされます。これは次のように定義されています:
const AREA_CODE = 'adminhtml';
Magento 2モジュールをマルチストア環境で作成する場合、これは重要です。異なるストアは異なる商品情報を表示する場合があり、同じ商品に対して完全に異なる価格を使用することもあります。また、コードがadminhtmlまたはフロントエンドから呼び出されたかどうかを確認する方法も説明しました。