แนวคิดทั่วไปคือการส่งผ่านขอบเขตที่เลือกผ่านพารามิเตอร์คำขอ
ฉันคิดว่าคุณควรใช้รหัสที่คล้ายกันเช่นในการแก้ไขผลิตภัณฑ์:
/** @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 == 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();
}
ตรวจพบมุมมองร้านค้าที่เลือกในปัจจุบันอย่างถูกต้องบนพื้นที่ส่วนหน้า แต่ไม่มีประโยชน์สำหรับพื้นที่ผู้ดูแลระบบ