Gagasan umum adalah untuk melewatkan ruang lingkup, dipilih, melalui parameter permintaan.
Saya pikir Anda harus menggunakan kode yang sama seperti dalam tindakan edit produk:
/** @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());
Dalam hal ini $store->getWebsiteId()
harus merupakan id situs web yang sebenarnya (dipilih). Tapi ini bisa dilakukan hanya jika Anda menggunakan blok toko yang bekerja dengan cara yang sama seperti blok magento standar (untuk memilih ruang lingkup toko):
Ini adalah hasil saya dalam contoh ketika saya memilih tampilan store default (id == 1):
dan di sini adalah untuk cakupan global default ( Semua Tampilan Toko , id situs web adalah 0):
Memperbarui:
Anda dapat menambahkan metode seperti ini di helper dan menggunakannya di tempat yang Anda inginkan:
/**
* @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;
}
Hasilnya harus seperti ini:
Backend tanpa lingkup pemilih - 0
Didukung dengan lingkup pemilih - id situs web yang dipilih atau 0 jika tidak ada yang dipilih (Semua Tampilan Toko)
Frontend - id situs web saat ini
Jika Anda mencari jalan pintas di frontend:
Anda dapat menggunakan Magento\Store\Model\StoreResolver
kelas untuk tujuan itu:
/**
* @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();
}
Itu benar mendeteksi tampilan toko yang dipilih saat ini di area frontend, tetapi tidak berguna untuk area admin.