Работа с файлом component_epilog.php | REDS Group
REDS Group
ул. Большая Академическая, дом 5, стр. 1, Москва.
Работа с файлом component_epilog.php

Работа с файлом component_epilog.php

614

Файл component_epilog.php - инструмент для модификации данных работы компонента с включенным кешированием. Создается разработчиком самостоятельно.

Схема работы компонента с файлами result_modifier.php и component_epilog.php:

Этот файл подключается после исполнения шаблона. Аналогично файлам стилей, родительский компонент сохраняет в своем кеше список файлов эпилогов всех шаблонов дочерних компонентов (возможно вложенных), а при хите в кеш подключает эти файлы в том же порядке, как они исполнялись без кеширования. Точно так же при вызове дочерних компонентов в шаблоне нужно передавать значение $component.

В файле component_epilog.php доступны $arParams, $arResult, но эти значения берутся из кеша. Набор ключей массива $arResult, попадающих в кеш, определяется в component.php вызовом вида:

$this->SetResultCacheKeys(array(
    "ID", 
    "IBLOCK_TYPE_ID", 
    "LIST_PAGE_URL", 
    "NAV_CACHED_DATA",
    "NAME", 
    "SECTION", 
    "ELEMENTS", 
));

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

В файле component_epilog.php может быть любой код - только следует учитывать, что исполняться он будет независимо от наличия кеша на каждом хите. До версии главного модуля 10.0 в шаблон компонента передавалась копия массива arResult. В силу этого модификация этого массива в файле result_modifier.php не давала никаких результатов. Чтобы стало возможным изменение результатов вывода закешированных данных нужно разместить в файле result_modifier.php следующий код:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;

$cp = $this->__component; // объект компонента

if (is_object($cp))
{
    // добавим в arResult компонента два поля - MY_TITLE и IS_OBJECT
    $cp->arResult['MY_TITLE'] = 'Мое название';
    $cp->arResult['IS_OBJECT'] = 'Y';
    $cp->SetResultCacheKeys(array('MY_TITLE','IS_OBJECT'));
    // сохраним их в копии arResult, с которой работает шаблон
    $arResult['MY_TITLE'] = $cp->arResult['MY_TITLE'];
    $arResult['IS_OBJECT'] = $cp->arResult['IS_OBJECT'];

    $APPLICATION->SetTitle($cp->arResult['MY_TITLE']); // не будет работать на каждом хите: 
//отработает только первый раз, затем будет все браться из кеша и вызова $APPLICATION->SetTitle()
// не будет. Поэтому изменение title делается в component_epilog, который выполняется на каждом хите.
}

?>

**Материалы взяты c сайта 1С-Битрикс**

05.04.2018 / Sadovikov Sergey
Комментарии (1)
Никита
20.11.2018
Отличная статья. Спасибо автору.