Yönetici Panelinde mevcut Web Sitesi Kimliğini nasıl alabilirim?


10

Birden çok web sitesi ile ilgili özel bir uzantı ile çalışıyorum. Bir sorunla karşılaştığımda, Web Sitesi Kimliği alarak Yönetici Panelinde yürütülecek bir kod kodu tanımlayın. website_id0 gibi bir sonuç bekledim ( store_websitetablodaki varsayılan kimlik ). Ama bu işlevi aşağıda kullandığımda daima 1 döndürür.

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

Sorum : website_idYönetici Panelinde güncel olmanın veya adminhtmlalanda çalışan bir işlevi tanımlamanın herhangi bir yolu var mı?

Not: Bu işlevin hem ön uçta hem de arka uçta çalışması gerekir.

Herhangi bir yardım mutluluk duyacağız.


mağazanızda ilk çoklu web sitesinin var olup olmadığını kontrol edin.
Suresh Chikani

Yanıtlar:


18

Genel fikir, seçilen kapsamı request parametresinden geçirmektir.

Ürün düzenleme eyleminde olduğu gibi benzer kodu kullanmanız gerektiğini düşünüyorum:

/** @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());

Bu durumda $store->getWebsiteId(), gerçek (seçili) web sitesi kimliği olmalıdır. Ancak bu, yalnızca standart magento bloğu ile aynı şekilde çalışan mağaza bloğunu (bir mağaza kapsamını seçmek için) kullanmanız durumunda yapılabilir:

mağaza seçici

Varsayılan mağaza görünümünü (id == 1) seçtiğimde örnekte elde ettiğim sonuç:

1 mağaza görünümü hata ayıklama örneği

ve burada varsayılan global kapsam içindir ( Tüm Mağaza Görünümleri , web sitesi kimliği 0'dır):

genel kapsam hata ayıklama örneği


Güncelleme:

Yardımcıya böyle bir yöntem ekleyebilir ve istediğiniz yerde kullanabilirsiniz:

/**
 * @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;
}

Sonuç şöyle olmalıdır:

  1. Kapsam seçicisiz arka uç - 0

    mağaza seçici olmadan desteklenir

  2. Kapsam seçiciyle desteklendi - seçilen web sitesi kimliği veya seçili bir şey yoksa 0 (Tüm Mağaza Görünümleri)

    mağaza seçicili arka uç

  3. Ön uç - geçerli web sitesi kimliği

    başlangıç ​​aşaması


Ön uçta kısa yol arıyorsanız:

Sen kullanabilirsiniz Magento\Store\Model\StoreResolverbu amaçla sınıf:

/**
 * @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();
}

Ön uç alanında seçili olan mağaza görünümünü doğru olarak algılar, ancak yönetici alanı için işe yaramaz.


Yönetici Panelinde çalışıyor. Ancak, ben ön tarafta mevcut web sitesi alacak istiyorum. Bu işlev her zaman geri dönerwebsite_id = 0
Thao Pham

Bu işlevin hem ön uçta hem de arka uçta çalışması gerekir.
Thao Pham

@ Fatura Mağaza kimliğini hangi yerden almaya çalıştığınızı açıklığa kavuşturabilir misiniz? Eklenti mi, yoksa gözlemci mi?
Siarhey Uchukhlebau

Merhaba @Siarhey Uchukhlebau, bir sınıftan almak istiyorum. Bu sınıf başka herhangi bir sınıftan çağrılabilir, örneğin: Kontrolör, Model, Yardımcı, Blok, ...
Thao Pham

@ Cevabı güncelledim, lütfen kontrol edin
Siarhey Uchukhlebau
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.