г. Казань, ул. Космонавтов, 41Б
Пн-Пт: 08:00-18:00
Передача переменных из result_modifier в component_epilog

Передача переменных из result_modifier в component_epilog

Нет изображения

При работе с компонентами битрикса, например, с компонентом bitrix:news.list, разработчики часто сталкиваются с задачей передачи данных из result_modifier.php в component_epilog.php. Данные, модифицированные или добавленные в result_modifier, не переносятся автоматически, поскольку Битрикс не сохраняет все изменения в кэше компонента. Чтобы решить эту проблему, необходимо явно указать, какие данные должны быть доступны в component_epilog.php.

Пример добавления данных в кэш компонента

Допустим, вы работаете с компонентом bitrix:news.list и хотите добавить текстовую строку Hello world! в массив $arResult, чтобы она была доступна в component_epilog.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 добавляем следующие строки:

$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 можно использовать следующим образом:

if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

// Доступ к данным
echo $arResult['LOGO_SRC'];
echo $arResult['SLIDER_SRC'];
echo $arResult['DESCR'];

Заключение

Этот подход позволяет эффективно управлять данными между различными частями компонента битрикса, обеспечивая гибкость и контроль над тем, какие данные доступны в вашем шаблоне и эпилоге компонента. Это особенно полезно для оптимизации производительности и организации кода в больших и сложных проектах.

Возврат к списку