Разработчик открывает каталог на 1С-Битрикс и видит один компонент bitrix:catalog, который каким-то образом показывает и дерево разделов, и список товаров, и детальную карточку — по разным адресам, без отдельных файлов на каждую страницу. А рядом лежит простой bitrix:news.list, который умеет только выводить список. В чём разница и почему это важно понимать до того, как начинать кастомизацию? Ответ — в делении компонентов на простые и комплексные.
В статье разберём устройство простых и комплексных компонентов 1С-Битрикс: как комплексный управляет маршрутизацией и ЧПУ, как он собирается из простых, где живут шаблоны, как работает кэширование и когда какой тип выбирать. Понимание этой механики отделяет аккуратную разработку от правок «на удачу». Сложные доработки компонентов и модулей мы закрываем услугой автоматизации на 1С и профильной разработки.
Коротко
- Простой компонент отвечает за один блок или страницу и не занимается маршрутизацией.
- Комплексный объединяет несколько связанных страниц, сам разбирает ЧПУ и распределяет запрос по режимам.
- Комплексный компонент внутри вызывает простые — их можно переиспользовать и кастомизировать по отдельности.
- Кастомизируйте через копию шаблона, result_modifier и component_epilog, не трогая component.php и class.php ядра.
Что такое компонент в 1С-Битрикс
Компонент в 1С-Битрикс — это переиспользуемый блок логики и представления. Он инкапсулирует получение данных (из инфоблоков, торгового каталога, модулей) и их вывод через шаблон. Логика компонента живёт в component.php и, в современном варианте, в классе class.php, а внешний вид — в отдельных шаблонах. Такое разделение позволяет ставить один и тот же компонент на разные страницы и оформлять его по-разному.
Все компоненты делятся на два вида по масштабу ответственности. Простой обслуживает одну зону — список, форму, элемент. Комплексный отвечает за целый сценарий из нескольких связанных страниц и берёт на себя маршрутизацию. Понимание, к какому виду относится компонент, определяет, как с ним работать: где искать шаблоны, как настраивать ЧПУ и как кэшировать.
Простой компонент: одна задача
Простой компонент решает ровно одну задачу и не знает ни о каких «соседних» страницах. Он получает параметры, выбирает данные и отдаёт их в шаблон — на этом его ответственность заканчивается.
- Одна зона вывода. Список новостей, форма обратной связи, баннерная область, детальная карточка отдельно.
- Нет маршрутизации. Простой компонент не разбирает URL целого раздела — он работает на той странице, куда его поставили.
- Простой контракт. На входе параметры, на выходе — данные в arResult и вывод шаблона.
- Лёгкая переносимость. Такой компонент удобно ставить в разные места и переиспользовать.
Примеры простых компонентов — bitrix:news.list, bitrix:news.detail, bitrix:catalog.section, форма bitrix:form. Каждый из них самодостаточен и не претендует на управление целым деревом адресов. Именно из таких кирпичей потом собирается комплексный компонент.
Комплексный компонент и маршрутизация
Комплексный компонент — это оркестратор. Он объединяет несколько логических страниц под одним вызовом и сам решает, какую из них показать по текущему URL. Именно поэтому bitrix:catalog по одному адресу показывает раздел, по другому — товар, по третьему — список, хотя физически это один компонент на одной странице.
Это даёт огромную экономию: не нужно вручную создавать страницы под каждый раздел и товар каталога. Комплексный компонент генерирует их логически на лету. Обратная сторона — он сложнее в понимании и настройке, потому что внутри у него несколько режимов и своя система шаблонов страниц.
ЧПУ и разбор URL
Сердце комплексного компонента — механизм человекопонятных URL (ЧПУ). Он определяет, как части адреса превращаются в режим работы и параметры.
- Включение ЧПУ. В настройках компонента задаётся, что он работает в режиме человекопонятных адресов, и указывается корневой путь.
- Описание путей. Файл с шаблонами URL сопоставляет маски адресов с внутренними страницами (список, раздел, элемент).
- Определение режима. По совпавшей маске компонент понимает, что показать, и извлекает переменные (код раздела, элемента).
- Вызов внутренней страницы. На основе режима подключается соответствующий внутренний компонент с нужными параметрами.
Понимание этого механизма критично при настройке SEO и переносе URL: правки ЧПУ комплексного компонента влияют сразу на всё дерево адресов. Ошибка в масках ломает не одну страницу, а целый раздел. Как аккуратно выкатывать такие изменения без сбоев, мы разбираем в статье про CI/CD и деплой для 1С-Битрикс.
Как комплексный собирается из простых
Важный принцип: комплексный компонент почти никогда не делает всю работу сам — он вызывает простые компоненты для каждого режима. Это делает архитектуру переиспользуемой и предсказуемой.
| Режим комплексного каталога | Вызываемый простой компонент | Что показывает |
|---|---|---|
| Корень каталога | catalog.section.list | Дерево разделов |
| Раздел | catalog.section | Список товаров раздела |
| Товар | catalog.element | Детальную карточку |
| Фильтр | catalog.smart.filter | Умный фильтр по свойствам |
Такая сборка означает, что кастомизировать каждый режим можно отдельно — через шаблон соответствующего простого компонента. Хотите изменить карточку товара — правите шаблон catalog.element, не трогая список и фильтр. Это мощный принцип: комплексный отвечает за маршрут и связность, простые — за конкретное представление.
Шаблоны и кастомизация без правки ядра
Главное правило работы с любым компонентом — не трогать его исходники в каталоге bitrix. Всё, что нужно изменить, меняется в слое шаблона сайта, а не в ядре, иначе обновления затрут ваши правки.
- Копия шаблона. Шаблон компонента копируется в шаблон сайта, и правится именно копия — представление, разметка, стили.
- result_modifier.php. Здесь дорабатывают данные перед выводом: добавляют поля, пересчитывают, форматируют — не меняя логику компонента.
- component_epilog.php. Код, который должен выполняться даже при кэшировании, — например, счётчики просмотров или динамические блоки.
- Параметры и .parameters.php. Настройки выносятся в параметры, а не хардкодятся в шаблоне.
Такой подход сохраняет обновляемость: component.php и class.php остаются нетронутыми, а вся кастомизация живёт в шаблоне. Это фундаментальная гигиена разработки на Битрикс. Более глубокие доработки, где нужен собственный класс, — уже уровень модуля, о чём мы пишем в статье про разработку своего модуля для 1С-Битрикс.
Кэширование обоих типов
Компоненты кэшируют результат, чтобы не дёргать базу на каждый запрос, но у простых и комплексных кэш устроен по-разному по масштабу.
- Простой компонент. Кэширует свой arResult по ключу из параметров. Инвалидация — по времени или тегам.
- Комплексный компонент. Кэширование многослойное: кэшируются и внутренние страницы-режимы, и общий результат маршрутизации.
- Теговый кэш. При изменении элемента инфоблока связанный кэш сбрасывается автоматически, если теговый кэш включён.
- Динамика через эпилог. То, что не должно кэшироваться (цена клиента, наличие), выносят в component_epilog или подгружают отдельно.
Неправильно настроенный кэш комплексного компонента — частая причина «залипших» старых данных: товар изменили, а витрина показывает прежнее. Правильная стратегия — теговый кэш плюс вынос действительно динамических данных из кэшируемой части. Как выстроить инфраструктуру под быстрый кэш, мы описали в материале про хостинг и BitrixVM.
Когда какой тип выбрать
Выбор между простым и комплексным компонентом сводится к вопросу: есть ли у вас несколько связанных страниц с общей логикой и ЧПУ.
- Простой — для самостоятельного блока. Список, форма, баннер, отдельная страница без внутренней навигации.
- Комплексный — для сценария. Каталог с разделами и карточками, новости со списком и детальной, где нужен разбор URL.
- Не усложняйте. Если страница одна, комплексный компонент избыточен и только добавит непонятной маршрутизации.
- Не дробите зря. Если страницы связаны общим ЧПУ, не собирайте их из разрозненных простых компонентов вручную — потеряете маршрутизацию.
На практике для типовых задач вы используете готовые комплексные компоненты (каталог, новости) и кастомизируете их шаблоны, а простые вставляете для отдельных блоков. Своё пишут редко и осознанно.
Свой компонент: стоит ли
Соблазн написать собственный компонент возникает часто, но в большинстве случаев штатные закрывают задачу через настройки и шаблоны. Прежде чем городить своё, стоит проверить несколько условий.
- Не решается ли настройками. Многое покрывается параметрами штатного компонента без единой строки кода.
- Не решается ли шаблоном. Изменение вывода — это шаблон и result_modifier, а не новый компонент.
- Нужна ли особая маршрутизация. Свой комплексный оправдан, когда нужен нестандартный разбор URL и режимов.
- Готовы ли поддерживать. Собственный компонент придётся обновлять и сопровождать самостоятельно.
Если ответы ведут к своему компоненту, это уже уровень полноценной разработки с классом, параметрами и, возможно, модулем. Подходить к этому стоит с ясной архитектурой, а не «по ходу дела».
Частые ошибки
- Правка исходников в bitrix. Изменения затираются обновлением, компонент становится неподдерживаемым.
- Логика в шаблоне. Тяжёлые запросы и бизнес-логика в template вместо result_modifier и класса.
- Комплексный там, где нужен простой. Одна страница обёрнута в комплексный компонент с лишней маршрутизацией.
- Сломанные ЧПУ. Ошибка в масках URL кладёт целый раздел, а не одну страницу.
- Динамика в кэше. Цена клиента и наличие кэшируются вместе со страницей и «залипают».
- Отключённый теговый кэш. Данные меняются, а витрина показывает старое.
- Своё вместо штатного. Пишут собственный компонент там, где хватило бы настроек и шаблона.
Чек-лист работы с компонентами
- Тип определён. Понятно, простой это блок или сценарий из связанных страниц с ЧПУ.
- Ядро не тронуто. Кастомизация идёт через копию шаблона, а не правку component.php.
- Данные в нужном месте. Доработка данных — в result_modifier, динамика — в component_epilog.
- ЧПУ проверены. Маски URL покрывают все режимы, разбор адресов корректен.
- Кэш настроен. Теговый кэш включён, динамические данные вынесены из кэшируемой части.
- Штатное в приоритете. Проверено, что задача не решается настройками и шаблоном.
- Обновляемость сохранена. После обновления ядра кастомизация не ломается.
Вывод
Деление на простые и комплексные компоненты — это не формальность, а ключ к грамотной разработке на 1С-Битрикс. Простой компонент решает одну задачу и не думает о навигации. Комплексный берёт на себя маршрутизацию, разбирает ЧПУ и собирается из простых, обслуживая целое дерево адресов одним вызовом.
Понимая эту механику, вы кастомизируете каталог и новости аккуратно: через шаблоны, result_modifier и эпилог, не трогая ядро и сохраняя обновляемость, с правильно настроенным теговым кэшем. А собственный комплексный компонент пишете только тогда, когда штатных настроек и шаблонов действительно не хватает. Такой подход экономит недели на поддержке и уберегает от правок «на удачу».