Передать данные в 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'];