सामान्य विचार अनुरोध पैरामीटर के माध्यम से चुना गया गुंजाइश है।
मुझे लगता है कि आपको इसी तरह के कोड का उपयोग करना चाहिए जैसे कि उत्पाद संपादन कार्रवाई:
/** @var \Magento\Store\Model\StoreManagerInterface $storeManager */
$storeManager = $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface');
$storeId = (int) $this->getRequest()->getParam('store', 0);
$store = $storeManager->getStore($storeId);
$storeManager->setCurrentStore($store->getCode());
इस मामले में $store->getWebsiteId()
वास्तविक (चयनित) वेबसाइट आईडी होना चाहिए। लेकिन यह केवल उस मामले में किया जा सकता है जब आप स्टोर ब्लॉक का उपयोग करते हैं जो मानक मैगनेटो ब्लॉक के समान काम करता है (स्टोर गुंजाइश चुनने के लिए):
जब मैं डिफ़ॉल्ट स्टोर दृश्य (आईडी == 1) का चयन करता हूं तो उदाहरण में मेरा परिणाम है:
और यहाँ डिफ़ॉल्ट वैश्विक गुंजाइश के लिए है ( सभी स्टोर दृश्य , वेबसाइट आईडी 0 है):
अपडेट करें:
आप सहायक में इस तरह एक विधि जोड़ सकते हैं और इसका उपयोग कर सकते हैं जहाँ आप चाहते हैं:
/**
* @var \Magento\Framework\App\State
*/
protected $state;
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
protected $storeManager;
/**
* Data constructor.
* @param Context $context
* @param \Magento\Framework\App\State $state
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
*/
public function __construct(
Context $context,
\Magento\Framework\App\State $state,
\Magento\Store\Model\StoreManagerInterface $storeManager
) {
parent::__construct($context);
$this->state = $state;
$this->storeManager = $storeManager;
}
/**
* @return int
*/
public function resolveCurrentWebsiteId()
{
if ($this->state->getAreaCode() == \Magento\Framework\App\Area::AREA_ADMINHTML) {
// in admin area
/** @var \Magento\Framework\App\RequestInterface $request */
$request = $this->_request;
$storeId = (int) $request->getParam('store', 0);
} else {
// frontend area
$storeId = true; // get current store from the store resolver
}
$store = $this->storeManager->getStore($storeId);
$websiteId = $store->getWebsiteId();
return $websiteId;
}
परिणाम इस तरह होना चाहिए:
गुंजाइश चयनकर्ता के बिना बैकएंड - 0
स्कोप चयनकर्ता के साथ समर्थित - चयनित वेबसाइट आईडी या 0 यदि कुछ नहीं चुना गया (ऑल स्टोर व्यूज़)
फ्रंटेंड - वर्तमान वेबसाइट आईडी
यदि आप फ्रंटएंड पर शॉर्ट-वे की तलाश कर रहे हैं:
आप Magento\Store\Model\StoreResolver
उस उद्देश्य के लिए कक्षा का उपयोग कर सकते हैं :
/**
* @var \Magento\Store\Model\StoreResolver
*/
private $storeResolver;
/**
* @param \Magento\Store\Model\StoreResolver $storeResolver
*/
public function __construct(
\Magento\Store\Model\StoreResolver $storeResolver
) {
$this->storeResolver = $storeResolver;
}
/**
* Returns the current store id, if it can be detected or default store id
*
* @return int|string
*/
public function getCurrentStoreId()
{
return $this->storeResolver->getCurrentStoreId();
}
यह सही रूप से दृश्यपटल क्षेत्र पर वर्तमान में चयनित स्टोर दृश्य का पता लगाता है, लेकिन व्यवस्थापक क्षेत्र के लिए बेकार है।