Как добавить пользовательское условие beforeLoad без кэша в magento 2? - PullRequest
0 голосов
/ 24 апреля 2020

Я создаю плагин, чтобы добавить пользовательское условие для всей коллекции продуктов 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...