Хочу поделиться своей проблемой, которая возникла при работе с компонентом catalog.section.list, которая вынудила меня кастомизировать весь компонент.Проблема заключается в том, что вне зависимости от настроек кеша компонент наглухо кешируется и если компонент вызывается на разных страницах, то никакие изменения на поведение компонента не влияют.Поиски проблемы привели меня в файл компонента component.php, где было исследовано его поведение при работе с Кешем.
Меня смутила строка:
Возможно есть и другие решения, было бы хорошо, если бы поделились, а если нет - то, чтобы разработчики приняли к сведению этот факт. Заранее спасибо.
Меня смутила строка:
Код |
---|
if($this->startResultCache(false, ($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups()))) |
Собственно получается, что ID кеша зависит только от набора групп пользователя и никак не зависит от параметров вызова компонента на странице (хотя и они не дают никакой гарантии уникальности). Я решил проблему следующим образом - включил в массив ID кеша адрес страницы, на которой находится пользователь и добавил параметр $arParams["CACHE_TIME"].
В итоге код получился таким:
Код |
---|
use Bitrix\Main\Application, Bitrix\Main\Web\Uri; $context = Application::getInstance()->getContext(); $request = $context->getRequest(); $uri = new Uri($request->getRequestUri()); if($this->StartResultCache($arParams["CACHE_TIME"], array(($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups()), $arParams, $uri->getPath()))) |