Главная » Разработка Битрикс » Компоненты » component_epilog.php в Битрикс — постобработка компонента

component_epilog.php в Битрикс — постобработка компонента

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

    Порядок работы компонента в Битрикс:

    1. component.php — формирование $arResult
    2. result_modifier.php — подготовка данных
    3. template.php — вывод HTML
    4. 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 — это мощный инструмент для постобработки в Битрикс. При правильном использовании он помогает разгрузить компонент, вынести вспомогательную логику и улучшить архитектуру проекта.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний