Дать возможность подключать эпилог компонента самостоятельно

Рейтинг: 0  
Новая
Предложил Белоконь Дмитрий 07.09.2016 11:12:19

Дать возможность подключать эпилог компонента самостоятельно

Добрый день.
Возник момент с кастомным кешированием в своем компоненте.
Согласно этому курсу (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, нужно подключение шаблона обязательно выводить из кешируемой области.
Прошу дать возможность разработчику самостоятельно подключать эпилог компонента в своем компоненте.  

Рейтинг: 0  
Фролов Сергей 11.09.2016 12:54:28
Вы создаете комплексный компонент и кешируете его, но хотите чтобы в дочернем были доступны переменные комплексного компонента? или я не так понял?
Рейтинг: 0  
Белоконь Дмитрий 11.09.2016 23:34:56
Компонент обычный, только при этом есть необходимость идентификатор кеша строить не по всем параметрам, которые заходят в компонент. По умолчанию метод startResultCache принимает автоматически для создания идентификатора кеша следующие параметры: SITE_ID, весь $arParams, имя компонента и имя шаблона. Изменить их нельзя, можно только добавить к ним еще дополнительные параметры.
Во-первых, такой вариант не всегда подходит.
Во-вторых, хочется получить возможность строить кеширование своего компонента вручную полностью. Сейчас же, если мы кешируем результат работы компонента методом StartDataCache, то, внеся подключение шаблона в кешируемую область, мы никак не сможем подключить component_epilog шаблона. То есть, чтобы полноценно работал шаблон в своем компоненте с кастомным кешированием CPHPCache, необходимо подключение шаблона обязательно выносить из кешируемой области. В стандартном же методе кеширования компонента, о котором я писал выше, (startResultCache) подключение шаблона может происходить в кешируемой области, но при этом внутрь этого метода вшито подключение эпилога шаблона на каждом хите. К этому методу сейчас доступа нет, чтобы его использовать в своем компоненте.