Как сделать недействительным значение Memcached при обновлении цены продукта в моем пользовательском модуле PrestaShop 1 ⇐ Php
Как сделать недействительным значение Memcached при обновлении цены продукта в моем пользовательском модуле PrestaShop 1
Я использую мультимагазин Prestashop 1.7. В одном из магазинов НДС включен, а в другом нет. Я создал собственный модуль, который подключается к хуку updateproduct. В этом модуле я обновляю цену товара, но только для магазина без НДС. Это гарантирует, что в обоих магазинах будут одинаковые окончательные цены.
Для повышения производительности я использую Memcached. Но я изо всех сил пытаюсь правильно аннулировать кеш. Как только значение для магазина без НДС кэшируется (то, которое я изменяю в своем модуле), оно никогда не меняется после попытки установить его снова в администраторе продукта. В базе данных оно изменяется правильно, но Memcached извлекает старое значение. Как я могу сделать недействительным или обновить сохраненное значение в Memcached? Я также понятия не имею, как получить правильный ключ Memcached, поскольку это хэш, например, ps_288e7d9f7adabca7ca488166fced130a.
В настоящее время единственный метод обновления Memcached, который я нашел, — это аннулирование всего кеша, что кажется неоптимальным решением с точки зрения производительности.
Cache::getInstance()->delete('*'); Это моя упрощенная функция-перехватчик для обновления цены:
частная функция updateProductPrice($params) { $id_product = $params['id_product']; $price = $params['product']->цена; $id_tax_rules_group = $params['product']->id_tax_rules_group; $shop_ids = $this->getShopIds(); $tax_rate = $this->getTaxRate($id_tax_rules_group); foreach ($shop_ids как $shop_id) { $is_tax = Configuration::get('PS_TAX', null, null, $shop_id); $sql = 'ВЫБРАТЬ `цену` ОТ `` . _DB_PREFIX_ . 'продукт' ГДЕ `id_product` = ' . (целое) $id_product; $base_price = (float)Db::getInstance()->getValue($sql); если (!$is_tax) { $new_price = $base_price * (100 + $tax_rate) / 100; Db::getInstance()->update('product_shop', ['price' => $new_price], 'id_product = '.(int)$id_product . ' AND id_shop = '.(int)$shop_id); } } } Без включения Memcached все работает нормально.
Я использую мультимагазин Prestashop 1.7. В одном из магазинов НДС включен, а в другом нет. Я создал собственный модуль, который подключается к хуку updateproduct. В этом модуле я обновляю цену товара, но только для магазина без НДС. Это гарантирует, что в обоих магазинах будут одинаковые окончательные цены.
Для повышения производительности я использую Memcached. Но я изо всех сил пытаюсь правильно аннулировать кеш. Как только значение для магазина без НДС кэшируется (то, которое я изменяю в своем модуле), оно никогда не меняется после попытки установить его снова в администраторе продукта. В базе данных оно изменяется правильно, но Memcached извлекает старое значение. Как я могу сделать недействительным или обновить сохраненное значение в Memcached? Я также понятия не имею, как получить правильный ключ Memcached, поскольку это хэш, например, ps_288e7d9f7adabca7ca488166fced130a.
В настоящее время единственный метод обновления Memcached, который я нашел, — это аннулирование всего кеша, что кажется неоптимальным решением с точки зрения производительности.
Cache::getInstance()->delete('*'); Это моя упрощенная функция-перехватчик для обновления цены:
частная функция updateProductPrice($params) { $id_product = $params['id_product']; $price = $params['product']->цена; $id_tax_rules_group = $params['product']->id_tax_rules_group; $shop_ids = $this->getShopIds(); $tax_rate = $this->getTaxRate($id_tax_rules_group); foreach ($shop_ids как $shop_id) { $is_tax = Configuration::get('PS_TAX', null, null, $shop_id); $sql = 'ВЫБРАТЬ `цену` ОТ `` . _DB_PREFIX_ . 'продукт' ГДЕ `id_product` = ' . (целое) $id_product; $base_price = (float)Db::getInstance()->getValue($sql); если (!$is_tax) { $new_price = $base_price * (100 + $tax_rate) / 100; Db::getInstance()->update('product_shop', ['price' => $new_price], 'id_product = '.(int)$id_product . ' AND id_shop = '.(int)$shop_id); } } } Без включения Memcached все работает нормально.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Prestashop — отображать обе цены (без НДС и с учетом НДС) на странице продукта.
Anonymous » » в форуме Php - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-