Как сделать правильное отображение у товаров цен со скидками при включеном кэше?

Приветствую всех.
На сайте работает компонент bitrix:catalog с включенным кэшированием. При отображении цены на товары без скидок проблем нет, а когда создается правило для корзины (скидка) то что бы правильно отобразились цены со скидкой необходимо сбрасывать кэш. Вариант каждый раз сбрасывать кэш (автоматически либо руками) не подходит, т.к. кэшируются порядка 25000 товаров.
Что нужно сделать, что правильно отображались цены со скидками, при часто меняющимися правилами для корзины (скидками) при включенном кэшировании.
Поддержка битрикс не помогла.
  • Вопрос задан
  • 2072 просмотра
Решения вопроса 1
@lycifep Автор вопроса
Видимо универсальным решением будет:
BXClearCache(false, "/s1/bitrix/catalog.section/");
(new \Bitrix\Main\Data\ManagedCache())->cleanAll();
(new \CStackCacheManager())->CleanAll();

при изменениях и добавлении скидок
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
gromdron
@gromdron
Работаю с Bitrix24
И правильно, что не подсказала.
Правила корзины зависят не только от товара, но и других условий.

Самый простой и топорный вариант как это сделать: подписываетесь на d7 события и обновляете кеш компонента.
Интересующие Вас события:
- \Bitrix\Modules\Sale\Internals\Discount::onAfterAdd (после создания)
- \Bitrix\Modules\Sale\Internals\Discount::onAfterUpdate (после обновления)

Как очистить кеш:
- https://dev.1c-bitrix.ru/api_help/main/functions/o...
- https://dev.1c-bitrix.ru/api_help/main/reference/c...
Ответ написан
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Оо, дорогой друг, добро пожаловать в мир извращений и костылей.
1. Заводим хайлоадблок в котором записываем id товара и его цену в момент работы компонента каталога, перед самым формированием кэша, обязательно тегируем кэш. И вешаем на крон обработчик который постоянно бегает по каталогу и проверяет цены (с учётом групп пользователей), если полученная цена не соответствует той что записана хайлоадблоке, тогда сбрасываем соответствующий кеш по тегу.

2. в ключ кеширования товаров добавить дату изменения правила работы с корзиной. Дата изменилась => кеш устарел.

3. все области с выводом цен в шаблонах подгружать аяксом (аналог композитного режима).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы