व्यवस्थापक पैनल में वर्तमान वेबसाइट आईडी कैसे प्राप्त करें?


10

मैं कई वेबसाइटों के साथ संबंधित कस्टम एक्सटेंशन के साथ काम कर रहा हूं। मैं एक समस्या के साथ सामना करता हूं, वेबसाइट आईडी प्राप्त करके व्यवस्थापक पैनल में स्क्रिप्ट कोड निष्पादित करता हूं। मुझे website_id0 ( store_websiteतालिका में डिफ़ॉल्ट आईडी ) जैसे परिणाम की उम्मीद थी । लेकिन जब मैं नीचे इस फ़ंक्शन का उपयोग कर रहा हूं तो यह हमेशा 1 लौटाता है।

/** @var \Magento\Store\Model\StoreManagerInterface */
$this->_storeManager->getStore()->getWebsiteId(); //return 1, expect 0
$this->_storeManager->getWebsite()->getId(); //return 1

मेरा प्रश्न : website_idएडमिन पैनल में करंट आने का कोई तरीका या adminhtmlक्षेत्र में चलने वाले फंक्शन को परिभाषित करना ?

नोट: इस फ़ंक्शन को फ्रंटएंड और बैकएंड दोनों पर काम करने की आवश्यकता है।

किसी भी सहायता की सराहना की जाएगी।


चेक करें कि पहली मल्टी वेबसाइट आपके स्टोर में मौजूद है या नहीं।
सुरेश चिकानी

जवाबों:


18

सामान्य विचार अनुरोध पैरामीटर के माध्यम से चुना गया गुंजाइश है।

मुझे लगता है कि आपको इसी तरह के कोड का उपयोग करना चाहिए जैसे कि उत्पाद संपादन कार्रवाई:

/** @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) का चयन करता हूं तो उदाहरण में मेरा परिणाम है:

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;
}

परिणाम इस तरह होना चाहिए:

  1. गुंजाइश चयनकर्ता के बिना बैकएंड - 0

    स्टोर चयनकर्ता के बिना समर्थित

  2. स्कोप चयनकर्ता के साथ समर्थित - चयनित वेबसाइट आईडी या 0 यदि कुछ नहीं चुना गया (ऑल स्टोर व्यूज़)

    स्टोर चयनकर्ता के साथ बैकएंड करें

  3. फ्रंटेंड - वर्तमान वेबसाइट आईडी

    फ़्रंट एंड


यदि आप फ्रंटएंड पर शॉर्ट-वे की तलाश कर रहे हैं:

आप 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();
}

यह सही रूप से दृश्यपटल क्षेत्र पर वर्तमान में चयनित स्टोर दृश्य का पता लगाता है, लेकिन व्यवस्थापक क्षेत्र के लिए बेकार है।


यह व्यवस्थापक पैनल में काम कर रहा है। हालाँकि, मैं चाहता हूं कि यह दृश्यपटल में वर्तमान वेबसाइट प्राप्त करेगा। यह समारोह हमेशा लौटता हैwebsite_id = 0
थाओ फाम

इस फ़ंक्शन को फ्रंटएंड और बैकएंड दोनों पर काम करने की आवश्यकता है।
थाओ फाम

@ क्या आप स्पष्ट कर सकते हैं कि आप किस स्थान पर स्टोर आईडी प्राप्त करने का प्रयास कर रहे हैं? क्या यह प्लगइन या शायद प्रेक्षक है?
सियारि उचुकलेबौ

हाय @ सियारही उचुकलेबौ, मैं इसे एक कक्षा से प्राप्त करना चाहता हूं। इस वर्ग को किसी भी अन्य वर्ग से बुलाया जा सकता है जैसे: नियंत्रक, मॉडल, हेल्पर, ब्लॉक, ...
थावे फाम

@ क्या मैंने जवाब अपडेट किया, कृपया जाँच करें
सियारि उचुकलेबौ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.