component_epilog.php — это специальный файл компонента в 1C-Битрикс, который выполняется после вывода шаблона. Он используется для выполнения дополнительной логики, не влияющей на отображение страницы.
Краткий ответ
component_epilog.php выполняется после template.php и используется для постобработки данных, логирования, аналитики и работы с кешем.
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
die();
}
// постобработка
Где находится component_epilog.php
Файл располагается внутри шаблона компонента:
/local/components/vendor/component.name/templates/.default/
component.php
template.php
result_modifier.php
component_epilog.php
Нужна помощь с Битрикс?
Когда выполняется component_epilog.php
Порядок работы компонента в Битрикс:
- component.php — формирование $arResult
- result_modifier.php — подготовка данных
- template.php — вывод HTML
- component_epilog.php — постобработка
Зачем нужен component_epilog.php
Этот файл используется для задач, которые не должны влиять на вывод страницы:
- логирование действий пользователя
- сбор аналитики
- обновление кеша
- запись метрик
- выполнение фоновой логики
Пример использования component_epilog.php
Логирование просмотра страницы
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
die();
}
AddMessage2Log("Component rendered: " . $this->getName());
Запись аналитики
<?php
global $USER;
$eventData = [
'USER_ID' => $USER->GetID(),
'TIME' => date('Y-m-d H:i:s'),
];
file_put_contents(
$_SERVER['DOCUMENT_ROOT'] . '/upload/logs/component.log',
json_encode($eventData) . PHP_EOL,
FILE_APPEND
);
Обновление кеша
<?php
$cache = \Bitrix\Main\Data\Cache::createInstance();
$cache->cleanDir('/my/component/cache/');
Особенности component_epilog.php
- выполняется после вывода HTML
- не влияет на отображение страницы
- имеет доступ к $arResult и $arParams
- может выполняться даже при включенном кешировании
component_epilog.php и кеширование
Даже при активном кешировании компонента component_epilog.php может выполняться отдельно от кеша. Это делает его полезным для задач, которые должны выполняться всегда.
if ($arResult['CACHE_TIME'] > 0)
{
// логика вне кеша
}
Типичные ошибки
1. Бизнес-логика внутри epilog
component_epilog.php не должен заменять component.php.
2. Выполнение тяжелых запросов
Долгие операции замедляют отклик сервера после генерации страницы.
3. Изменение $arResult
После вывода шаблона изменения данных уже не влияют на страницу.
4. Использование для генерации HTML
component_epilog.php не предназначен для вывода контента.
5. Игнорирование производительности
Файл выполняется на каждом хите, даже при кешировании.
Лучшие практики
- используйте epilog только для фоновых задач
- не выполняйте тяжелые запросы
- не генерируйте HTML
- используйте логирование и аналитику
- разделяйте логику и представление
Пример полного component_epilog.php
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
die();
}
global $USER;
AddMessage2Log("Component executed: " . $this->getName());
$logData = [
'USER_ID' => $USER->GetID(),
'COMPONENT' => $this->getName(),
'TIME' => date('Y-m-d H:i:s'),
];
file_put_contents(
$_SERVER['DOCUMENT_ROOT'] . '/upload/component_log.txt',
json_encode($logData) . PHP_EOL,
FILE_APPEND
);
FAQ
Когда выполняется component_epilog.php?
После завершения работы шаблона компонента.
Влияет ли epilog на вывод страницы?
Нет, HTML уже отправлен пользователю.
Можно ли использовать его для AJAX?
Нет, для AJAX лучше использовать component.php или отдельные контроллеры.
Выполняется ли он при кешировании?
Да, может выполняться отдельно от кешируемой части компонента.
Заключение
component_epilog.php — это мощный инструмент для постобработки в Битрикс. При правильном использовании он помогает разгрузить компонент, вынести вспомогательную логику и улучшить архитектуру проекта.