La idea general es pasar el alcance, elegido, a través del parámetro de solicitud.
Creo que debería usar un código similar al de la acción de edición del producto:
/** @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());
En este caso, $store->getWebsiteId()
debe ser la identificación real (seleccionada) del sitio web. Pero esto solo se puede hacer en caso de que use el bloque de tienda que funciona de la misma manera que un bloque de magento estándar (para seleccionar un alcance de tienda):
Aquí está mi resultado en el ejemplo cuando selecciono la vista de tienda predeterminada (id == 1):
y aquí está el alcance global predeterminado ( Todas las vistas de la tienda , la identificación del sitio web es 0):
Actualizar:
Puede agregar un método como este en el asistente y usarlo donde desee:
/**
* @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;
}
El resultado debería ser así:
Backend sin selector de alcance - 0
Respaldado con selector de alcance: ID del sitio web seleccionado o 0 si no se selecciona nada (Todas las vistas de la tienda)
Frontend - ID actual del sitio web
Si está buscando el camino corto en la interfaz:
Puede usar la Magento\Store\Model\StoreResolver
clase para ese propósito:
/**
* @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();
}
Detecta correctamente la vista de la tienda seleccionada actualmente en el área de la interfaz, pero es inútil para el área de administración.