-15%Скидка 15% на разработку сайта или магазина при старте до конца месяца

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

Кастомизация шаблона и готового решения на 1С-Битрикс без потери обновляемости: копии компонентов, свой модуль, события

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

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

Коротко

  • Никогда не правьте файлы ядра и исходники готового решения напрямую — обновление их затрёт.
  • Меняйте вёрстку через копию шаблона компонента, логику — через копию компонента в своём namespace.
  • Свой PHP-код держите в init.php или, лучше, в собственном модуле; поведение меняйте событиями.
  • Правильная кастомизация — та, после которой вы спокойно обновляете ядро на копии сайта.

Почему обновляемость важнее, чем кажется

Обновляемость — это не «приятная опция», а вопрос безопасности и живучести проекта. Ядро Битрикс регулярно закрывает уязвимости, а готовые решения — исправляют баги и добавляют функции. Сайт, который нельзя обновить, со временем накапливает дыры в безопасности и отстаёт по возможностям от того, что уже доступно из коробки.

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

Что ломается при прямой правке

Чтобы понять, как делать правильно, посмотрим, что именно ломается при неправильном подходе. Прямая правка означает изменение файлов, которые Битрикс считает «своими» и перезаписывает при обновлении.

Правило простое: всё, что лежит в /bitrix/ и принадлежит ядру или решению, — чужая территория. Ваши доработки должны жить в других местах, которые обновление не трогает.

Обмен данными сайта с 1С Сайткаталог, заказы1Стовары, заказыОбменочередь / APIДанные идут в обе стороны по расписанию или по событию
Схема: сайт и 1С обмениваются данными в обе стороны — по расписанию или по событию. Товары и остатки приходят на сайт, заказы уходят обратно.

Три уровня кастомизации

Кастомизацию удобно разложить по уровням — от самого лёгкого и безопасного к самому глубокому. Выбирайте минимально достаточный уровень для задачи.

УровеньЧто меняемМеханизмРиск для обновлений
1. ВёрсткаВнешний вид, выводКопия шаблона компонентаНет
2. ПоведениеРеакция на действияСобытия в init.php / модулеНет
3. ЛогикаРабота компонентаКопия компонента в своём namespaceМинимальный

Общий принцип: сначала пытаемся решить задачу шаблоном и событиями, и только если не выходит — копируем компонент или пишем модуль. Чем выше уровень, тем больше кода под вашим контролем и тем важнее его версионировать. О том, как выстроить безопасный процесс выкладки таких доработок, — в статье про CI/CD и деплой в Битрикс.

Доработка шаблона компонента

Самый частый и безопасный уровень — правка шаблона компонента. Штатный компонент вроде bitrix:catalog.section состоит из логики (component.php, class.php) и шаблонов (template.php, style.css, script.js). Чтобы изменить внешний вид и вывод, шаблон копируют в шаблон сайта и правят уже там.

Что это даёт:

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

Копия компонента в свой namespace

Когда шаблоном задачу не решить и нужно менять саму логику работы компонента, его копируют в собственное пространство имён. Вместо bitrix:catalog.section появляется, например, custom:catalog.section, и правится уже копия. Обновление ядра меняет оригинал в bitrix:, а вашей копии не касается.

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

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

init.php и обработчики событий

Поведение системы меняют не правкой её кода, а событиями. Битрикс построен на событийной модели: сохранение заказа, добавление товара, оформление, авторизация — почти всё генерирует события, на которые можно повесить свой обработчик. Обработчики регистрируют в /bitrix/php_interface/init.php (или в шаблоне сайта) — это штатное место, которое обновления не трогают.

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

Собственный модуль поверх решения

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

Плюсы собственного модуля:

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

Результирующие шаблоны и включаемые области

Кроме компонентов, у сайта есть общий шаблон (header, footer, обёртка страниц) и включаемые области. Их тоже кастомизируют, не ломая обновляемость: шаблон сайта — это ваша территория, он не относится к обновляемому ядру. Здесь настраивают вёрстку каркаса, подключают свои стили и скрипты, задают меню и хлебные крошки.

Включаемые области (#INCLUDE_AREA#, включаемые файлы) позволяют контент-менеджеру править куски страниц без разработчика и без риска задеть логику. Правильно спроектированный шаблон сайта разделяет каркас, редактируемый контент и логику компонентов — так каждый слой меняется независимо и безопасно.

Готовые решения из Маркетплейса

Готовое решение — не приговор для доработок, если подходить грамотно. Решение можно расширять всеми перечисленными способами: копировать его компоненты, делать свои шаблоны, вешать события, писать модуль поверх. Ключевое правило — не редактировать исходники решения напрямую.

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

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

Как безопасно обновляться

Даже при правильной кастомизации обновление проводят по процессу, а не «в лоб на бою». Последовательность такая:

  1. Копия сайта. Разверните актуальную копию боевого сайта на тестовом окружении.
  2. Обновление на копии. Прогоните обновление ядра и решений сначала там.
  3. Проверка доработок. Убедитесь, что кастомный функционал работает: заказ, каталог, кабинет, интеграции.
  4. Сверка копий компонентов. Проверьте компоненты, которые копировали, — не разошлись ли они с оригиналом.
  5. Выкладка на бой. Только после успешной проверки на копии обновляйте боевой сайт.
  6. Контроль после. Последите за ошибками и ключевыми сценариями в первые часы после обновления.

Стабильная инфраструктура для такого процесса — отдельная тема: тестовое окружение, бэкапы, откат. Про фундамент под это писали в статье про хостинг и инфраструктуру на BitrixVM.

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

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

  1. Ядро не тронуто. В /bitrix/modules/ и исходниках решения нет ваших правок.
  2. Вёрстка — в шаблонах компонентов. Внешний вид меняется копиями шаблонов, не логикой.
  3. Поведение — событиями. Реакции на действия висят на обработчиках в init.php или модуле.
  4. Логика — в своём namespace. Глубокие правки компонентов сделаны на копиях, а не в оригинале.
  5. Крупные доработки — в модуле. Свой функционал изолирован, версионируется, переносим.
  6. Всё в git. Доработки под контролем версий, есть возможность отката.
  7. Обновление проверено на копии. Обновляемость подтверждена на тестовом окружении.

Вывод

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

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

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

Почему нельзя просто править файлы готового решения напрямую?

Потому что при следующем обновлении решения или ядра ваши правки затрутся. Готовые решения из Маркетплейса и само ядро Битрикс регулярно обновляются, и обновление перезаписывает оригинальные файлы. Если вы меняли их напрямую, вы либо теряете доработки, либо навсегда отказываетесь от обновлений, что опасно с точки зрения безопасности и совместимости.

Что значит «копировать компонент в свой namespace»?

Штатные компоненты Битрикс лежат в bitrix:. Чтобы их дорабатывать безопасно, компонент копируют в собственное пространство имён, например custom:catalog.section, и правят уже копию. Обновление ядра меняет оригинал в bitrix:, а вашей копии не касается. Это базовый приём, позволяющий менять логику компонента и при этом спокойно обновляться.

Можно ли дорабатывать только шаблон компонента, не трогая логику?

Да, и это самый частый и безопасный путь. Шаблон компонента (template.php, style.css, script.js) копируется в шаблон сайта и правится там, а component.php и class.php остаются штатными. Так вы меняете вёрстку и вывод, не вмешиваясь в логику, и обновления компонента подхватываются автоматически. Логику трогают только когда шаблоном задачу не решить.

Куда девать свой PHP-код, чтобы он не потерялся при обновлении?

В init.php шаблона или, лучше, в собственный модуль. init.php (php_interface/init.php) — штатное место для регистрации обработчиков событий и вспомогательных функций, оно не затрагивается обновлениями. Для крупных доработок заводят собственный модуль: код изолирован, версионируется и переносится между проектами. Правка файлов ядра для этого не нужна никогда.

Как менять поведение системы, не редактируя её код?

Через события (обработчики). Битрикс построен на событийной модели: почти любое действие — сохранение заказа, добавление товара, оформление — генерирует событие, на которое можно повесить свой обработчик. Обработчик регистрируется в init.php или модуле и выполняет вашу логику, не меняя ядро. Это главный механизм безопасной кастомизации поведения.

Готовое решение из Маркетплейса — это тупик для доработок?

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

Что хуже — форк решения или аккуратные доработки поверх?

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

Как понять, что кастомизация сделана правильно?

Главный признак — вы можете обновить ядро и ключевые решения без потери доработок и без «падения» сайта. Если обновление проходит, а кастомный функционал продолжает работать, значит правки лежат в правильных местах: свои компоненты, шаблоны, init.php, модуль и события, а не в файлах ядра. Регулярно проверяйте это на копии сайта перед боевым обновлением.

Поделиться:

Сайт нельзя обновить из-за доработок?

Проведём аудит, найдём правки в ядре и решении, перенесём их в безопасные механизмы и вернём проекту обновляемость. Рассчитаем работу по вашему сайту.

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

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

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