ФиксИнтернет-магазин на 1С-Битрикс под ключ за 30 дней по фиксированной цене

Кастомизация компонентов через templates без правки ядра

Кастомизация компонентов 1С-Битрикс через шаблоны без правки ядра: копирование шаблона, result_modifier, component_epilog

Заказчик просит «чуть поменять вывод каталога», и рука тянется открыть файл компонента прямо в /bitrix/components и поправить. Работает — до первого обновления платформы, которое молча затирает все ваши правки, и каталог возвращается к исходному виду. Правка ядра — это техдолг, который обязательно взорвётся: то при апдейте, то при переносе на другой стенд, то при попытке разобраться, почему сайт ведёт себя не так, как в документации.

Эта статья — практическое руководство по правильной кастомизации компонентов 1С-Битрикс через шаблоны, без единой правки ядра. Разберём копирование шаблона, result_modifier, component_epilog, свои параметры и наследование класса компонента. Такой подход мы применяем во всех проектах и закладываем в автоматизацию на 1С и доработку сайтов, чтобы код переживал обновления.

Коротко

  • Никогда не правьте файлы в /bitrix — обновления их затрут; вся кастомизация живёт в /local.
  • Для внешнего вида достаточно скопировать шаблон компонента и менять его.
  • Данные готовьте в result_modifier.php, вёрстку держите в template.php, а код вне кэша — в component_epilog.php.
  • Логику компонента меняйте наследованием class.php, а не правкой оригинала.

Почему правка ядра — это ловушка

Соблазн понятен: открыть системный файл и быстро поправить кажется самым коротким путём. Но у правки ядра три фатальных последствия. Первое — обновления. При апдейте платформы или модуля системные файлы перезаписываются, и ваши изменения исчезают без следа. Второе — хрупкость: правка в общем компоненте влияет на весь сайт, и ошибка ломает всё разом. Третье — непрозрачность: следующий разработчик не ожидает изменений в ядре и потратит часы, разбираясь, почему поведение отличается от документации.

1С-Битрикс с самого начала спроектирован так, чтобы кастомизация не требовала правки ядра. Есть штатные точки расширения — шаблоны, модификаторы результата, эпилоги, наследование классов, события. Задача разработчика — знать эти точки и использовать их, а не ломать систему обновлений ради минутной экономии.

Как устроен компонент и его шаблон

Чтобы кастомизировать грамотно, нужно понимать разделение ответственности внутри компонента. Компонент 1С-Битрикс — это две части: логика и представление.

Ключевая идея: логику компонента менять нужно редко, а вот шаблон — почти всегда. Поэтому основной инструмент кастомизации — работа с шаблоном, где живут template.php, result_modifier.php, component_epilog.php, style.css, script.js и .parameters.php. Понимание этого разделения избавляет от лишнего копирования логики там, где достаточно поменять вывод.

Слои приложения на 1С-Битрикс (D7) ЗапросбраузерКомпонентшаблон, логикаAPI-ядро D7бизнес-логикаДанныеинфоблоки, БДСлои разделены: шаблон не лезет в базу напрямую, логика — в ядре D7
Схема: запрос обрабатывает компонент, бизнес-логика живёт в ядре D7, а данные — в инфоблоках. Чёткие слои держат код поддерживаемым и тестируемым.

Копирование шаблона в /local

Базовый приём кастомизации — не трогать системный шаблон, а сделать его копию в своей теме. Битрикс ищет шаблон компонента сначала в вашей теме, и если находит там — использует его вместо системного.

  1. Найдите системный шаблон. Он лежит в /bitrix/components/…/templates/.default (или в шаблоне сайта).
  2. Скопируйте его в /local. В /local/templates/ваш_шаблон/components/… с тем же путём компонента.
  3. Дайте своё имя шаблону. Не .default, а осмысленное — например catalog-custom.
  4. Укажите шаблон в вызове компонента. В параметре TEMPLATE пропишите своё имя.
  5. Меняйте копию. Теперь правки идут в вашем файле, оригинал нетронут и переживёт обновления.

Каталог /local — принципиально важен: это ваша зона, которую обновления платформы не трогают. Всё кастомное — шаблоны, компоненты, модули, обработчики — держат именно там, отделяя свой код от системного и упрощая перенос между стендами.

result_modifier.php: подготовка данных

Первое, что осваивают при кастомизации шаблона, — файл result_modifier.php. Он выполняется до template.php и предназначен для того, чтобы дополнить или преобразовать массив $arResult перед выводом. Именно сюда выносят всю подготовку данных.

Смысл в разделении: result_modifier отвечает за «что выводим», template.php — за «как выводим». Когда логика подготовки данных вынесена из вёрстки, шаблон остаётся читаемым, а изменения данных не превращаются в поиск по HTML. Это чистый, поддерживаемый способ обогащать вывод компонента.

template.php: чистая вёрстка

Файл template.php должен содержать преимущественно разметку и минимум логики — только то, что напрямую связано с выводом: циклы по элементам, условия отображения, вставку подготовленных данных. Тяжёлые вычисления, запросы к базе и подготовку структур сюда тащить не нужно — для этого есть result_modifier.

Такое разделение окупается при поддержке: верстальщик правит внешний вид, не боясь задеть логику, а разработчик меняет данные, не копаясь в разметке. Чем чище template.php, тем дешевле дальнейшие изменения. Хорошая привычка — относиться к шаблону как к слою представления, куда данные приходят уже готовыми.

component_epilog.php: код вне кэша

Ключевой нюанс, на котором спотыкаются новички, — кэширование. Компонент кэшируется целиком, включая result_modifier и template.php. Это значит, что код в них выполняется только при пересборке кэша, а не на каждом хите. Для данных каталога это хорошо, но есть код, который должен работать всегда.

Для этого существует component_epilog.php — он выполняется после кэша, на каждом запросе. Сюда помещают то, что зависит от текущего момента и пользователя:

Типовая ошибка: установить заголовок страницы в result_modifier. Он закэшируется вместе с компонентом, и на всех страницах будет «застывший» title от первого закэшированного элемента. Такой код — только в component_epilog.php.

Свои параметры через .parameters.php

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

Эти параметры появляются в настройках компонента рядом со стандартными и доступны в шаблоне через $arParams. Так вы делаете кастомизацию управляемой: контент-менеджер настраивает поведение блока через привычный интерфейс, а не зовёт разработчика ради каждой мелочи. Это особенно ценно для типовых блоков, которые ставятся на многих страницах с разными настройками.

Переопределение class.php наследованием

Всё вышеперечисленное меняет представление. Но иногда нужно изменить саму логику компонента — например, как он выбирает данные. Править class.php в ядре по-прежнему нельзя. Правильный путь — наследование: создают свой компонент, класс которого расширяет оригинальный, и переопределяют только нужные методы.

Так вы меняете конкретное поведение, оставляя остальное как в оригинале и сохраняя совместимость с обновлениями. Это более глубокая кастомизация, и применять её стоит осознанно — когда задачу действительно не решить через шаблон и модификатор результата. Похожие принципы наследования и расширения лежат в основе разработки собственных модулей; для сложной бизнес-логики нередко именно свой модуль оказывается чище, чем нагромождение наследников компонентов.

Стили, скрипты и ассеты шаблона

Шаблон компонента — это не только PHP, но и свои style.css и script.js. Битрикс автоматически подключает эти файлы, если они лежат в папке шаблона, и умеет собирать их в общий набор страницы. Держать стили и скрипты рядом с шаблоном — правильная практика: кастомизация становится самодостаточной.

Кэширование при кастомизации

Кастомизация не должна ломать кэш — иначе вы улучшите вид, но обрушите скорость. Помните базовые правила: result_modifier и template.php кэшируются, component_epilog — нет. Если ваша доработка тянет тяжёлые запросы, держите их внутри кэшируемой части, а не в эпилоге, который выполняется на каждом хите.

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

Перенос и деплой кастомизаций

Кастомизация в /local хороша ещё и тем, что её удобно версионировать и переносить между стендами. Весь ваш код лежит в одном каталоге, отделённом от системного, и укладывается под систему контроля версий целиком. Обновление платформы меняет /bitrix, а ваш /local остаётся под вашим контролем.

На проектах с несколькими стендами (разработка, тест, боевой) это критично: кастомизации переносятся предсказуемо, без ручного копирования файлов из ядра. Как организовать надёжный перенос и автоматический деплой, мы описали в статье про CI/CD и деплой в Битрикс. Дисциплина «весь кастом в /local под git» превращает кастомизацию из источника хаоса в управляемый процесс.

Частые ошибки

Чек-лист кастомизации

  1. Ядро не тронуто. Ни одной правки в /bitrix/components и /bitrix/modules.
  2. Кастом в /local. Шаблоны, компоненты и обработчики лежат отдельно от системного кода.
  3. Данные в result_modifier. Подготовка вынесена из template.php.
  4. Некэшируемое в эпилоге. Заголовки, персонализация и счётчики — в component_epilog.
  5. Логика — наследованием. Изменения class.php через расширение, а не правку оригинала.
  6. Ассеты рядом с шаблоном. style.css и script.js в папке шаблона.
  7. Всё под git. /local версионируется и предсказуемо переносится между стендами.

Вывод

Кастомизация 1С-Битрикс без правки ядра — это не ограничение, а признак зрелой разработки. Платформа даёт полный набор точек расширения: копирование шаблона, result_modifier для данных, template.php для вёрстки, component_epilog для некэшируемого кода, .parameters.php для настроек и наследование class.php для логики. Всё это живёт в /local и переживает обновления.

Стоит один раз выстроить эту дисциплину — весь кастом в /local, разделение данных и вёрстки, версионирование — и сайт перестаёт «ломаться после обновлений». Кастомизация становится предсказуемой, переносимой и понятной следующему разработчику. Это дешевле в поддержке и надёжнее в эксплуатации, чем любая быстрая правка ядра.

Частые вопросы

Почему нельзя просто отредактировать компонент в /bitrix/components?

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

Чем отличается кастомизация шаблона от копирования компонента целиком?

В большинстве задач достаточно скопировать только шаблон компонента в свою тему (/local/templates/…) и менять вёрстку и вывод там. Копировать весь компонент (папку с component.php) нужно, лишь когда требуется изменить саму логику работы, а не отображение. Начинайте с шаблона: это проще, безопаснее и покрывает подавляющее большинство задач по кастомизации внешнего вида и обработки данных для вывода.

Что такое result_modifier.php и когда он нужен?

Это файл шаблона компонента, который выполняется до template.php и позволяет дополнить или преобразовать массив $arResult перед выводом. В нём удобно готовить данные: форматировать цены, подтягивать доп. свойства, перестраивать структуру. Логика подготовки данных выносится сюда, а template.php остаётся чистой вёрсткой. Это штатный механизм, который обновления не затрагивают.

Зачем нужен component_epilog.php?

Component_epilog выполняется после кэширования компонента, поэтому код в нём отрабатывает на каждом хите, даже когда сам компонент отдаётся из кэша. Сюда помещают то, что должно работать всегда: установку заголовка страницы, хлебные крошки, счётчики, работу с текущим пользователем. Если положить такой код в result_modifier, он закэшируется и «застынет», а в эпилоге он живой.

Где размещать кастомные шаблоны — в /bitrix или /local?

В /local. Каталог /local — это ваша зона, которую обновления платформы не трогают; там держат кастомные шаблоны сайта, компоненты, модули и обработчики. Размещение в /bitrix/templates исторически тоже работает, но /local чище отделяет ваш код от системного и упрощает перенос между стендами и деплой. Это современная рекомендуемая практика.

Можно ли переопределить class.php компонента без правки оригинала?

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

Как не потерять кастомизацию при обновлении Битрикса?

Соблюдать одно правило: никогда не править файлы в /bitrix/components и /bitrix/modules. Вся кастомизация живёт в /local — свои шаблоны, result_modifier, эпилоги, наследники классов. Тогда обновление обновляет только системные файлы, а ваш код остаётся нетронутым. Дополнительно держите /local под системой контроля версий, чтобы любые изменения были прозрачны и обратимы.

Поделиться:

Нужна доработка Битрикса, которая переживёт обновления?

Кастомизируем компоненты и шаблоны через /local, наведём порядок в коде и деплое. Рассчитаем работу по вашему проекту.

Автоматизация на 1С

Игорь Воскресенский

Команда B2Bsite. С 2014 года разрабатываем на 1С-Битрикс: кастомизируем компоненты и шаблоны без правки ядра, держим код в /local и обновляем платформу без сюрпризов.

← Все статьи блога