Я создаю плагин, чтобы добавить пользовательское условие для всей коллекции продуктов beforeLoad. Однако у меня есть проблема. Пример:
Пользователь_1 имеет доступ к ab c .com / product с cook ie инвентарь = XYZ Функция beforeLoad будет запущена с условием инвентаризации = XYZ и вернет коллекцию продуктов, magento кэшировал эту страницу с коллекцией продуктов следуйте за инвентарём = XYZ.
Пользователь_2, пользователь_n имеет доступ к ab c .com / продукту, у которого нет инвентаря или инвентаря = GHQ отличается от повара инвентаря ie пользователя_1. Но Magento загружает коллекцию продуктов из кэша, который он не запускал до функции beforeLoad в моем плагине. Таким образом, результат списка товаров будет таким же, как результат user_1.
Я был создан, чтобы вызвать очистить кэш коллекции в magento перед перезагрузкой страницы. Это работает, но делает загрузку страницы очень медленной.
Пожалуйста, помогите мне, Как сделать так, чтобы magento всегда вызывал функцию beforeLoad в моем плагине без перезагрузки страницы? или другое решение, чтобы позвонить, чтобы перезагрузить коллекцию продуктов с пользовательским условием.
Мой код, как показано ниже:
public function beforeLoad(\Magento\Catalog\Model\ResourceModel\Product\Collection $subject, $printQuery = false, $logQuery = false)
{
$areaCode = $this->_state->getAreaCode();
$inventory_source = $this->_request->getParam("inventory");
/*if(isset($_COOKIE["inventory"])){
$inventory_source = $_COOKIE["inventory"];
}*/
if($areaCode == 'frontend' && $inventory_source != ""){
$joinCondition[] = "e.sku = isi.sku";
$joinCondition[] = "isi.source_code = '".$inventory_source."'";
$joinCondition = implode(' AND ', $joinCondition);
if (!$subject->isLoaded()) {
$subject->getSelect()
->join(
[ 'isi' => $subject->getTable('inventory_source_item') ],
$joinCondition,
[]
);
}
}
return [$printQuery, $logQuery];
}
Большое спасибо, BienHV