← 1С-Битрикс
1С-Битрикс

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

Кастомизация компонентов 1С-Битрикс без изменения ядра

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

Большинство изменений публичной части можно сделать без вмешательства в ядро: через собственный шаблон компонента, result_modifier.php, component_epilog.php или отдельный компонент проекта.

Что должно оставаться в template.php

Шаблон отвечает прежде всего за представление: HTML-разметку и минимальную логику вывода. Если внутри шаблона появляются большие запросы к базе, сложные вычисления и изменение данных, поддерживать компонент становится труднее.

Хороший шаблон получает уже подготовленный $arResult и превращает его в интерфейс. Это особенно важно, когда один и тот же компонент используется в нескольких местах с разными шаблонами.

Для чего нужен result_modifier.php

result_modifier.php выполняется перед шаблоном и подходит для подготовки результата: добавить вычисляемое поле, нормализовать массив, получить связанные данные одним запросом или подготовить URL. Благодаря этому HTML остаётся читаемым.

Но здесь важно помнить о кешировании компонента. Если модификатор делает тяжёлый запрос, нужно понимать, когда этот код выполняется и что именно попадает в кеш.

Когда нужен component_epilog.php

component_epilog.php выполняется после шаблона и может использоваться для действий, которые должны происходить после вывода, в том числе при работе компонента с кешем. Чтобы нужные значения были доступны, их заранее добавляют в ключи кеша результата.

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

Почему копия шаблона безопаснее правки системного

Стандартный шаблон можно скопировать в шаблон сайта и менять уже локальную версию. Тогда обновление платформы не перезапишет файл. При этом разработчик всегда может сравнить локальную копию с актуальным стандартным шаблоном и вручную перенести полезные изменения после крупного обновления.

Когда шаблона уже недостаточно

Если нужно изменить сам алгоритм выборки, добавить новую бизнес-логику или полностью поменять контракт данных, лучше сделать собственный компонент в /local/components/. Попытка решить такую задачу десятками условий в шаблоне обычно заканчивается трудно поддерживаемым кодом.

Что не стоит делать

  • редактировать файлы внутри /bitrix/components/;
  • выполнять запрос к базе для каждого элемента прямо в цикле шаблона;
  • размещать бизнес-логику в HTML;
  • копировать огромный стандартный компонент ради изменения одной строки без анализа;
  • забывать о кешировании после добавления новых данных в результат.

Практическая структура доработки

  1. Определите, меняется только отображение или логика получения данных.
  2. Для отображения создайте собственный шаблон компонента.
  3. Подготовку данных вынесите в result_modifier.php.
  4. Пост-обработку, связанную с кешем и страницей, разместите в component_epilog.php.
  5. Если меняется бизнес-логика компонента — создайте собственный компонент в /local/.
  6. После изменений проверьте работу с включённым кешем и после очистки кеша.
Чем меньше проект зависит от изменений внутри ядра, тем спокойнее проходят обновления и тем проще передавать сайт другому разработчику.

Перед крупным обновлением полезно отдельно проверить все локальные шаблоны и компоненты. Подробнее о самом процессе обновления — в статье как безопасно обновлять 1С-Битрикс.

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

Спасибо. Ваше сообщение было успешно отправлено.
Мы свяжемся с Вами в ближайшее время.