Доработка стандартных компонентов через component_epilog 1С-Битрикс

Доработка стандартных компонентов через component_epilog в 1С-Битрикс Часто задачи выходят за рамки стандартной логики компонента. В 80% проектов мы используем `component_epilog.php` для внедрения аналитики и сбора метрик без нарушения кэширования. Это экономит в среднем 4 часа на один компонент
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Доработка стандартных компонентов через component_epilog 1С-Битрикс
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1018
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    803
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1162

Доработка стандартных компонентов через component_epilog в 1С-Битрикс

Часто задачи выходят за рамки стандартной логики компонента. В 80% проектов мы используем component_epilog.php для внедрения аналитики и сбора метрик без нарушения кэширования. Это экономит в среднем 4 часа на один компонент и упрощает поддержку — никаких костылей в template.php. Проблема: стандартные компоненты Битрикс при включённом кэше не выполняют result_modifier.php, а значит, аналитика и счётчики перестают работать корректно на кэшированных страницах.

Файл component_epilog.php решает эту проблему без отключения кэша. Наши инженеры за 8 лет работы с платформой реализовали более 200 компонентных доработок с использованием эпилога — от простой аналитики до сложной интеграции с внешними CRM-системами. Такой подход обеспечивает стабильность работы компонента, сохраняет производительность за счёт кэширования шаблона и позволяет добавлять функционал без правки ядра. Это официально рекомендованный способ доработки от вендора платформы 1С-Битрикс, применяемый в enterprise-проектах.

Место в последовательности выполнения

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

Примеры успешных проектов

За время работы мы реализовали интеграции для компаний разного размера: от небольших интернет-магазинов до крупных оптовых дистрибьюторов. Каждый проект требовал индивидуального подхода, и мы гордимся результатом, который значительно улучшил эффективность работы наших клиентов.

Преимущества нашего подхода

Мы обеспечиваем комплексное решение, а не отдельные исправления. Каждый проект включает документирование, тестирование и обучение команды. Нашим клиентам нравится, что мы не просто выполняем работу, но и объясняем каждый шаг процесса, давая возможность вашей команде в будущем самостоятельно поддерживать систему. Со своей стороны, мы гарантируем помощь в течение года после завершения проекта.

Контакты и следующие шаги

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