Добрый день. Возник момент с кастомным кешированием в своем компоненте. Согласно этому курсу (https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3053), подключение шаблона можно размещать как в кешируемой области, так и вне её. При подключении шаблона в кешируемой области собственного компонента со сложным кешированием шаблон не отрабатывает вообще - сразу выводится html-кеш. Разница в том, что в стандартных компонентах используется метод StartResultCache и при этом template.php кешируется полностью и выводится как html-кеш. При этом из кеша на хите достаются переменные VARS из файла кеша и передаются в component_epilog.php, что не происходит, если строить свое кеширование согласно вышеуказанному курсу. Покопавшись в исходниках, выяснил, что в метод startResultCache() вшит также метод includeComponentEpilog(), которого нет в классах кастомного кеширования и в документации. При этом входящие данные для него от родительского компонента в своем дочернем компоненте получить нельзя, так как свойство, в котором хранится путь и данные для метода includeComponentEpilog() лежат в родительском свойстве __component_epilog, которое имеет модификатор доступа private и недоступен в потомке. В связи с этим кастомное кеширование получается неполноценным, т.к. для использования в шаблонах component_epilog, нужно подключение шаблона обязательно выводить из кешируемой области. Прошу дать возможность разработчику самостоятельно подключать эпилог компонента в своем компоненте.
Компонент обычный, только при этом есть необходимость идентификатор кеша строить не по всем параметрам, которые заходят в компонент. По умолчанию метод startResultCache принимает автоматически для создания идентификатора кеша следующие параметры: SITE_ID, весь $arParams, имя компонента и имя шаблона. Изменить их нельзя, можно только добавить к ним еще дополнительные параметры. Во-первых, такой вариант не всегда подходит. Во-вторых, хочется получить возможность строить кеширование своего компонента вручную полностью. Сейчас же, если мы кешируем результат работы компонента методом StartDataCache, то, внеся подключение шаблона в кешируемую область, мы никак не сможем подключить component_epilog шаблона. То есть, чтобы полноценно работал шаблон в своем компоненте с кастомным кешированием CPHPCache, необходимо подключение шаблона обязательно выносить из кешируемой области. В стандартном же методе кеширования компонента, о котором я писал выше, (startResultCache) подключение шаблона может происходить в кешируемой области, но при этом внутрь этого метода вшито подключение эпилога шаблона на каждом хите. К этому методу сейчас доступа нет, чтобы его использовать в своем компоненте.
Во-первых, такой вариант не всегда подходит.
Во-вторых, хочется получить возможность строить кеширование своего компонента вручную полностью. Сейчас же, если мы кешируем результат работы компонента методом StartDataCache, то, внеся подключение шаблона в кешируемую область, мы никак не сможем подключить component_epilog шаблона. То есть, чтобы полноценно работал шаблон в своем компоненте с кастомным кешированием CPHPCache, необходимо подключение шаблона обязательно выносить из кешируемой области. В стандартном же методе кеширования компонента, о котором я писал выше, (startResultCache) подключение шаблона может происходить в кешируемой области, но при этом внутрь этого метода вшито подключение эпилога шаблона на каждом хите. К этому методу сейчас доступа нет, чтобы его использовать в своем компоненте.