Как передать данные в component_epilog.php в компонентах Битрикс

Архитектурные особенности кэширования в компонентах

При работе со стандартным компонентом bitrix:news.list (и большинством других D7-компонентов) реализован механизм двойного кэширования:

  1. HTML-кэш – полный рендеринг шаблона
  2. Data-кэш – сериализованные данные компонента (ограниченный набор ключей $arResult)

По умолчанию кэшируются только базовые ключи (ID элементов, навигация). Пользовательские данные требуют явного объявления.


Решение проблемы передачи кастомных данных

Для экспорта произвольных данных из шаблона в component_epilog.php необходимо:

  1. Инициализировать ключи кэширования\ В result_modifier.php:

    <?php
    // Регистрация ключей для data-кэша
    $this->__component->SetResultCacheKeys([
       'TEXT', 
       'CUSTOM_DATA',
       'DYNAMIC_VALUE'
    ]);
  2. Декларация данных в шаблоне\ В template.php:

    <?php
    $arResult['TEXT'] = 'Hello World!';
    $arResult['DYNAMIC_VALUE'] = calculateDynamicValue(); // Произвольная логика
  3. Доступ в component_epilog.php\ Зарегистрированные ключи доступны через:

    <?php
    $this->arResult['TEXT']; 
    $this->arResult['DYNAMIC_VALUE'];

Технические ограничения и рекомендации

  1. Приоритеты кэширования\ Метод SetResultCacheKeys() должен вызываться до рендеринга шаблона (оптимально – в result_modifier.php).

  2. Типы данных\ Поддерживается сериализация:

    • Примитивы (string, int, bool)
    • Массивы
    • Объекты, реализующие \Serializable
  3. Производительность\ Избегайте регистрации неиспользуемых ключей – каждый ключ увеличивает размер data-кэша.


Альтернативный метод через \$arParams

Для передачи простых значений без модификации $arResult:

// result_modifier.php
$component = $this->getComponent();
$component->arParams['CUSTOM_PARAM'] = 'Dynamic Value';

// component_epilog.php
$customValue = $this->arParams['CUSTOM_PARAM'];

Особенности реализации:

  • Не требует модификации кэш-ключей
  • Подходит для передачи служебных флагов и настроек
  • Значения не сериализуются – пригодны только для примитивов

Отладка и верификация

  1. Проверка кэшированных данных\ Используйте метод дампа в component_epilog.php:

    <?php
    \Bitrix\Main\Diag\Debug::dump($this->arResult);
    \Bitrix\Main\Diag\Debug::dump($this->arParams);
  2. Очистка кэша\ При изменении структуры данных:

    php /bitrix/php_interface/clear_cache.php

Оптимизация работы с кэшем

  1. Динамическое управление TTL

    $this->__component->SetResultCacheMaxAge(3600); // В секундах
  2. Условное кэширование

    if ($needCache) {
       $this->__component->SetResultCacheKeys(['DATA']);
    }
  3. Ключи зависимостей

    $this->__component->SetResultCacheKeys(['DEPENDENT_KEY']);
    $this->__component->SetResultCacheDependent($entityId);

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