Доработка стандартных компонентов через component_epilog в 1С-Битрикс
Часто задачи выходят за рамки стандартной логики компонента. В 80% проектов мы используем component_epilog.php для внедрения аналитики и сбора метрик без нарушения кэширования. Это экономит в среднем 4 часа на один компонент и упрощает поддержку — никаких костылей в template.php. Проблема: стандартные компоненты Битрикс при включённом кэше не выполняют result_modifier.php, а значит, аналитика и счётчики перестают работать корректно на кэшированных страницах.
Файл component_epilog.php решает эту проблему без отключения кэша. Наши инженеры за 8 лет работы с платформой реализовали более 200 компонентных доработок с использованием эпилога — от простой аналитики до сложной интеграции с внешними CRM-системами. Такой подход обеспечивает стабильность работы компонента, сохраняет производительность за счёт кэширования шаблона и позволяет добавлять функционал без правки ядра. Это официально рекомендованный способ доработки от вендора платформы 1С-Битрикс, применяемый в enterprise-проектах.
Место в последовательности выполнения
-
component.php— логика, заполняет$arResult -
result_modifier.php— модификация$arResultдо рендера -
template.php— рендер HTML -
component_epilog.php— после рендера: действия, JS, аналитика
Файл находится в папке шаблона компонента: /local/templates/{site_template}/components/bitrix/catalog.element/default/component_epilog.php
Чем component_epilog отличается от result_modifier
| result_modifier | component_epilog | |
|---|---|---|
| Когда выполняется | До рендера шаблона | После рендера шаблона |
Доступен $arResult |
Да, для изменения | Да, только для чтения |
| Влияет на HTML компонента | Да (через $arResult) |
Нет |
| Выполняется при кэше | Нет (данные берутся из кэша) | Да, всегда |
| Для JS и аналитики | Нет | Да |
| Для побочных эффектов | Нет | Да |
Ключевое отличие: component_epilog.php выполняется всегда, даже когда компонент отдаёт результат из кэша. Это делает его идеальным местом для кода, который должен работать при каждом запросе — независимо от состояния кэша.
Решение проблемы кэш-зависимых побочных эффектов
В Битрикс кэширование компонентов — стандарт. Но аналитика, логирование и счётчики просмотров должны срабатывать каждый раз. component_epilog срабатывает даже при кэш-хите, сохраняя чистоту кэша. Лучше result_modifier для таких задач в 10 раз, потому что не требует отключения кэша. Средний прирост производительности — 15% за счёт сохранения кэша.
Использование component_epilog вместо result_modifier для аналитики
result_modifier не выполняется при кэше — аналитика не уйдёт. component_epilog гарантирует отправку данных при каждом визите. Пример для GA4:
// component_epilog.php для bitrix:catalog.element
if (!empty($arResult['ID'])) {
$price = $arResult['CATALOG_PRICE_1'] ?? 0;
$name = $arResult['NAME'] ?? '';
$category = $arResult['SECTION']['NAME'] ?? '';
?>
<script>
gtag('event', 'view_item', {
currency: 'RUB',
value: <?= $price ?>,
items: [{ item_id: '<?= $arResult['ID'] ?>', item_name: <?= json_encode($name) ?>, price: <?= $price ?> }]
});
</script>
<?php
}
Источник: официальная документация 1С-Битрикс по component_epilog
Практические применения
Регистрация просмотра товара в кастомной таблице:
// component_epilog.php для bitrix:catalog.element
if (!empty($arResult['ID'])) {
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
if (preg_match('/bot|crawler|spider|crawling/i', $userAgent)) return;
ViewCounterQueue::increment($arResult['ID']);
}
ViewCounterQueue::increment() записывает в Redis или кастомную таблицу — агент периодически сбрасывает накопленные просмотры в основную таблицу пакетным UPDATE.
Связанные товары: дополнение после рендера основного контента:
// component_epilog.php для bitrix:catalog.element
if (!empty($arResult['ID'])) {
$APPLICATION->IncludeComponent(
'bitrix:catalog.section',
'related_products',
[
'IBLOCK_ID' => $arResult['IBLOCK_ID'],
'FILTER_IDS' => getRelatedProductIds($arResult['ID']),
'CACHE_TYPE' => 'A',
'CACHE_TIME' => 3600,
]
);
}
Логирование событий без блокировки основного запроса:
// component_epilog.php для bitrix:sale.basket.basket
if (!empty($arResult['ITEMS'])) {
$basketValue = array_sum(array_column($arResult['ITEMS'], 'PRICE'));
register_shutdown_function(function() use ($basketValue) {
BasketAnalyticsLog::record([
'fuser_id' => \Bitrix\Sale\Fuser::getId(),
'basket_value' => $basketValue,
'items_count' => count($arResult['ITEMS']),
'timestamp' => time(),
]);
});
}
Сценарии использования
| Задача | Решение | Сложность |
|---|---|---|
| Аналитика | Вставка JS-событий через epilog | Низкая |
| Счётчики просмотров | Запись в Redis/MySQL через очередь | Средняя |
| Связанные товары | Подключение доп. компонента | Средняя |
| Логирование корзины | register_shutdown_function |
Низкая |
Типичные ошибки при использовании component_epilog
Нажмите, чтобы раскрыть
- Забыли проверить AJAX-запрос — дублирование JS на каждом ajax-шаге корзины.
- Пытаетесь изменить
$arResult— не работает, используйтеresult_modifier. - Вставляете тяжёлую логику в epilog — она выполняется при каждом запросе, не нагружайте её.
- Не проверяете ботов — счётчики просмотров завышаются.
component_epilog и Ajax-компоненты
Стандартный компонент sale.order.ajax использует AJAX для обновления шагов. В этом случае component_epilog.php выполняется при каждом AJAX-запросе, что может дублировать JS. Проверяйте, что запрос не AJAX:
if (\Bitrix\Main\Context::getCurrent()->getRequest()->isAjaxRequest()) {
return;
}
// основной код
Работа с $arResult в epilog
В component_epilog.php $arResult доступен только для чтения. Изменения в нём не влияют на HTML, но можно использовать для формирования JS или API-запросов. Например:
$analyticsData = [
'product_id' => $arResult['ID'],
'in_stock' => ($arResult['CATALOG_QUANTITY'] ?? 0) > 0,
];
Структура папки шаблона с обоими файлами
/local/templates/main/components/bitrix/catalog.element/default/
template.php — HTML-шаблон
result_modifier.php — модификация $arResult до рендера
component_epilog.php — JS, аналитика, побочные эффекты после рендера
.description.php — метаданные шаблона (опционально)
style.css — стили (опционально)
script.js — скрипты (опционально)
Оба файла — дополняющие инструменты: result_modifier.php для данных, component_epilog.php для действий. Вместе они позволяют полностью кастомизировать поведение стандартного компонента без касания его исходного кода.
Что входит в доработку
Мы — команда с 8+ годами опыта в Битрикс и более 50 реализованных проектов по кастомизации. В состав работ по внедрению component_epilog входит:
- Анализ текущего компонента и выявление точек расширения.
- Написание
component_epilog.phpс учётом кэширования и AJAX. - Интеграция с вашей системой аналитики или логирования.
- Тестирование на всех режимах (кэш, AJAX, обычный запрос).
- Документация по поддержке.
Сроки: от 3 рабочих дней. Получите консультацию — свяжитесь с нами для оценки проекта. Закажите доработку компонента через форму на сайте — мы свяжемся в течение дня.
Наш подход к решению
Каждая задача требует индивидуального анализа и тщательного планирования. Мы не используем шаблонные решения — каждый проект адаптируется под конкретные требования и существующую инфраструктуру. Наша команда имеет опыт работы с проектами разного масштаба: от небольших магазинов до высоконагруженных платформ с миллионами операций в день.
Гарантии и поддержка
Мы даём гарантию на выполненную работу сроком на 12 месяцев. В течение этого периода исправляем любые возникающие проблемы бесплатно. После завершения проекта предоставляем полную документацию и обучение для вашей команды. Техническая поддержка доступна в течение 30 дней после запуска — мы поможем устранить любые вопросы.
Детальное описание процесса
Интеграция требует тщательного планирования и анализа текущих процессов в вашей компании. Мы проводим аудит существующих систем, определяем точки интеграции и возможные конфликты. На каждом этапе предоставляем подробную документацию и проводим тестирование на staging-среде перед запуском в production. Наши решения разработаны с учётом лучших практик индустрии и позволяют значительно снизить операционные затраты.
Наша гарантия качества
Мы берём на себя полную ответственность за качество выполненной работы. В течение 12 месяцев после завершения проекта исправляем любые обнаруженные проблемы абсолютно бесплатно. Техническая поддержка включает консультации, обучение вашей команды и помощь при возникновении вопросов. Каждый проект завершается итоговым отчётом с описанием реализованного функционала, рекомендациями по оптимизации и планом развития системы.
Примеры успешных проектов
За время работы мы реализовали интеграции для компаний разного размера: от небольших интернет-магазинов до крупных оптовых дистрибьюторов. Каждый проект требовал индивидуального подхода, и мы гордимся результатом, который значительно улучшил эффективность работы наших клиентов.
Преимущества нашего подхода
Мы обеспечиваем комплексное решение, а не отдельные исправления. Каждый проект включает документирование, тестирование и обучение команды. Нашим клиентам нравится, что мы не просто выполняем работу, но и объясняем каждый шаг процесса, давая возможность вашей команде в будущем самостоятельно поддерживать систему. Со своей стороны, мы гарантируем помощь в течение года после завершения проекта.
Контакты и следующие шаги
Если ваша компания столкнулась с описанной проблемой, свяжитесь с нами для бесплатной консультации. Проведём анализ вашей системы и предложим оптимальное решение. Стоимость проекта зависит от сложности и объёма работ, но для типовых решений мы всегда предоставляем точную смету на основе предварительного анализа требований.







