일반적인 아이디어는 요청 매개 변수를 통해 선택한 범위를 전달하는 것입니다.
제품 편집 작업과 비슷한 코드를 사용해야한다고 생각합니다.
/** @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()
실제 (선택된) 웹 사이트 ID 여야합니다. 그러나 이것은 표준 마 젠토 블록과 같은 방식으로 작동하는 상점 블록을 사용하는 경우에만 가능합니다 (점포 범위 선택).
다음은 기본 상점보기 (id == 1)를 선택했을 때의 결과입니다.
다음은 기본 전역 범위입니다 ( 모든 상점보기 , 웹 사이트 ID는 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
범위 선택기로 백업- 선택된 웹 사이트 ID 또는 아무것도 선택하지 않은 경우 0 (모든 상점보기)
프론트 엔드- 현재 웹 사이트 ID
프론트 엔드에서 단거리를 찾고 있다면 :
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();
}
프론트 엔드 영역에서 현재 선택된 상점보기를 올바르게 감지하지만 관리 영역에는 쓸모가 없습니다.