Передать данные в component_epilog.php
Иногда требуется в шаблоне компонента дополучить данные и перенести их в component_epilog.php, например возьмем стандартный компонент bitrix:news.list. Даже если мы добавим новый ключ в массив $arResult и разместим в нем наши данные:
<?
$arResult['TEXT'] = 'Hello world!';
Данные не попадут в component_epilog.php, потому что компонент bitrix:news.list не добавляет в кэш все данные, он кэширует вывод всего HTML-кода, который выводит шаблон и дополнительно кэширует некоторые, но не все элементы массива $arResult.
Пример добавления данных в кэш компонента
Для того, что бы нужные данные попали в component_epilog.php, их нужно добавить вручную. Нам нужно, что бы наши данные попали в дата-кэш компонента, который отвечает за массив данных компонента.
Для нашего примера $arResult['TEXT'] в result_modifier.php добавим следующие строки:
result_modifier.php<?
$arResult['TEXT'] = 'Hello world!';
$this->__component->SetResultCacheKeys(['TEXT']);
Здесь мы добавляем новый ключ TEXT в массив $arResult и используем метод SetResultCacheKeys() объекта компонента, чтобы указать, что TEXT должен сохраняться в кэше и быть доступен в component_epilog.php.
Передача нескольких значений
Если нужно передать несколько значений, процесс аналогичен. Предположим, нужно передать значения из PREVIEW_PICTURE, DETAIL_PICTURE и PREVIEW_TEXT. В result_modifier.php добавляем следующие строки:
result_modifier.php<?
// объект компонента
$cp = $this->__component;
if (is_object($cp))
{
$cp->arResult['LOGO_SRC'] = $arResult['PREVIEW_PICTURE']['SRC'];
$cp->arResult['SLIDER_SRC'] = $arResult['DETAIL_PICTURE']['SRC'];
$cp->arResult['DESCR'] = $arResult['PREVIEW_TEXT'];
$cp->SetResultCacheKeys(['LOGO_SRC', 'SLIDER_SRC', 'DESCR']);
}
Использование данных в component_epilog.php
В файле component_epilog.php данные из $arResult можно использовать следующим образом:
component_epilog.php<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
// доступ к данным
echo $arResult['LOGO_SRC'];
echo $arResult['SLIDER_SRC'];
echo $arResult['DESCR'];