Иногда требуется в шаблоне компонента дополучить какие то данные и перенести их в component_epilog.php
Например возьмем стандартный компонент bitrix:news.list. Даже если мы добавим новый ключ в массив $arResult и разместим в нем наши данные, например:
<?
$arResult['TEXT'] = 'Hello world!';
?>
То эти данные не попадут в component_epilog.php, потому что компонент bitrix:news.list не добавляет в кэш все данные, он кэширует вывод всего HTML-кода, который выводит шаблон и дополнительно кэширует некоторые элементы массива $arResult, но не все.
Для того что бы нужные данные попали в component_epilog.php, их нужно добавить вручную. Для начала ваш шаблон компонента должен содержать следующий набор файлов.
.. lang result_modifier.php template.php component_epilog.php
Где:
- lang - это папка с языковыми файлами (она необязательна), используется исключительно если ваш сайт мультиязычный, но об этом не в этой статье.
- result_modifier.php - Исполняется самым первым в шаблоне и служит для дополнительной обработки данных, получения дополнительных данных из базы или любых других операциях с данными. По правилам хорошего тона программирования в среде CMS 1С-Битрикс, всю дополнительную обработку данных нужно совершать тут. Если компонент использует кэш, то result_modifier.php попадает в ту часть работы компонента, которая кэшируется. Т.е. PHP-код в нем исполнится для первого пользователя, открывшего страницу, а для остальных пользователей результат его работы будет браться из кэша.
- template.php - Исполняется вторым по счету, служит для вывода HTML-кода компонента. Если компонент использует кэш, то template.php так же кэшируется.
- component_epilog.php - Это некэшируемая часть шаблона, весь его PHP-код будет исполняться при каждом открытии страницы.
С кратким описанием работы шаблона компонента разобрались, теперь как же передать данные в component_epilog.php?
Нам нужно, что бы наши данные попали в дата-кэш компонента. Т.е. в кэш, который отвечает за массив данных компонента.
Для этого (для нашего примера $arResult['TEXT']) в result_modifier.php добавим следующие строки:
<?
$this->__component->SetResultCacheKeys(['TEXT']);
?>
Т.е. в метод SetResultCacheKeys() мы должны передать массив ключей из $arResult которые должны попасть в component_epilog.php
Если например нам нужно передать в component_epilog.php данные из $arResult['KEY1'], $arResult['KEY2'], $arResult['KEY3'] то код будет выглядеть так:
<?
$this->__component->SetResultCacheKeys(['KEY1', 'KEY2', 'KEY3']);
?>