Ý tưởng chung là để vượt qua phạm vi, được chọn, thông qua tham số yêu cầu.
Tôi nghĩ bạn nên sử dụng mã tương tự như trong hành động chỉnh sửa sản phẩm:
/** @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());
Trong trường hợp này $store->getWebsiteId()
phải là id trang web thực tế (được chọn). Nhưng điều này chỉ có thể được thực hiện trong trường hợp bạn sử dụng khối cửa hàng hoạt động giống như khối magento tiêu chuẩn (để chọn phạm vi cửa hàng):
Đây là kết quả của tôi trong ví dụ khi tôi chọn chế độ xem cửa hàng mặc định (id == 1):
và ở đây dành cho phạm vi toàn cầu mặc định ( Tất cả Lượt xem cửa hàng , id trang web là 0):
Cập nhật:
Bạn có thể thêm một phương thức như thế này trong trình trợ giúp và sử dụng nó ở nơi bạn muốn:
/**
* @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;
}
Kết quả sẽ như thế này:
Phần cuối không có bộ chọn phạm vi - 0
Được hỗ trợ với bộ chọn phạm vi - id trang web được chọn hoặc 0 nếu không có gì được chọn (Tất cả lượt xem cửa hàng)
Frontend - id trang web hiện tại
Nếu bạn đang tìm kiếm con đường ngắn trên frontend:
Bạn có thể sử dụng Magento\Store\Model\StoreResolver
lớp cho mục đích đó:
/**
* @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ó phát hiện chính xác chế độ xem cửa hàng hiện được chọn trên khu vực lối vào, nhưng vô dụng đối với khu vực quản trị.