Блог Горошко Андрея 1C-Битрикс component_epilog.php Выполнение кода после вывода шаблона компонента

component_epilog.php Выполнение кода после вывода шаблона компонента

В жизненном цикле компонента Битрикс есть специальный файл — component_epilog.php.

Он выполняется после того, как отработал template.php, то есть после того, как основной HTML компонента уже был сгенерирован и выведен в буфер.

Расположение: /path/to/component/templates/template_name/component_epilog.php

Зачем он нужен? Классические задачи

Основная ценность component_epilog.php в том, что на момент его выполнения уже точно известны все данные, которые были отображены пользователю.

Это идеальное место для задач, которые зависят от финального результата.

1. Установка SEO-заголовков и мета-тегов (SetPageProperty)

Это самая частая и правильная задача для эпилога.

Например, в детальной карточке товара (catalog.element) нужно установить title и description страницы на основе названия и описания товара.

Если сделать это в component.php, а в шаблоне по какой-то причине товар не будет выведен (например, сработает условие if), то мета-теги все равно установятся, что некорректно. В component_epilog.php мы уверены, что товар был показан.

// /components/bitrix/catalog.element/templates/.default/component_epilog.php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

/** @var array $arResult */
global $APPLICATION;

// Если у нас есть данные об элементе и они были выведены
if (isset($arResult['ID']) && $arResult['ID'] > 0) {
    
    // Устанавливаем заголовок страницы (<title>)
    $APPLICATION->SetPageProperty('title', $arResult['META_TITLE'] ?: $arResult['NAME']);
    
    // Устанавливаем мета-тег description
    $APPLICATION->SetPageProperty('description', $arResult['META_DESCRIPTION'] ?: '');
}
  • Доступные переменные: В component_epilog.php доступны все те же переменные, что и в template.php: $arResult, $arParams, $component.

2. Добавление элементов в навигационную цепочку («хлебные крошки»)

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

// /components/bitrix/news.detail/templates/.default/component_epilog.php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

/** @var array $arResult */
global $APPLICATION;

if ($arParams["ADD_ELEMENT_CHAIN"] == "Y" && !empty($arResult['NAME'])) {
    $APPLICATION->AddChainItem($arResult["NAME"]);
}

3. Подключение JS-расширений или выполнение JS-кода

Иногда JS-код или расширение требуются только если компонент успешно отработал и вывел определенные данные.

// component_epilog.php
if ($arResult['SHOW_GALLERY']) {
    \CJSCore::Init(['popup', 'fx']);
    // Можно даже сгенерировать JS-код на основе $arResult
    ?>
    <script>
        BX.ready(function(){
            // Инициализация галереи для элемента с ID <?=$arResult['ID']?>
        });
    </script>
    <?
}

Важно: Код из component_epilog.php выводится после основного HTML компонента. Если вы подключаете здесь JS, убедитесь, что это не приведет к ошибкам (например, скрипт не пытается найти DOM-элементы, которые были выше по коду).

Что НЕ нужно делать в component_epilog.php

  • Выполнять «тяжелые» запросы к БД. Вся выборка данных должна быть в component.php. Эпилог — не для этого.
  • Генерировать HTML-верстку. Весь HTML должен быть в template.php.
  • Изменять $arResult. Это бессмысленно, так как template.php уже отработал.

Вывод:
component_epilog.php — это «последнее слово» компонента.

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

Правильное использование эпилога делает ваши компоненты более логичными и предсказуемыми.

component_epilog.php, Битрикс, эпилог компонента, SetPageProperty, AddChainItem, SEO, хлебные крошки, жизненный цикл компонента.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Настройка электронной коммерции (E-commerce) в Яндекс Метрике для БитриксНастройка электронной коммерции (E-commerce) в Яндекс Метрике для Битрикс

Бесшовная интеграция сайта на 1С-Битрикс с внешними системами — это ключевое условие автоматизации продаж и масштабирования бизнеса. Услуга «Настройка электронной коммерции (E-commerce) в Яндекс Метрике для Битрикс» обеспечивает отслеживание просмотров

Как использовать $APPLICATION->GetCurDir() в 1С-Битрикс: пример кодаКак использовать $APPLICATION->GetCurDir() в 1С-Битрикс: пример кода

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Как использовать $APPLICATION->GetCurDir() в 1С-Битрикс: пример кода». Мы подготовили подробный разбор принципов работы и развернутые

Интеграция 1С-Битрикс с сервисом проверки подлинности маркировки Честный ЗнакИнтеграция 1С-Битрикс с сервисом проверки подлинности маркировки Честный Знак

Бесшовная и отказоустойчивая интеграция сайта на 1С-Битрикс с внешними учетными системами, банками, службами доставки и маркетплейсами — основа масштабирования современного бизнеса. Услуга «Интеграция 1С-Битрикс с сервисом проверки подлинности маркировки Честный