К статье
Практический материал

Разработка и Конфигурация · 12 мин

Компоненты в 1С-Битрикс: что это и как с ними работать

Что такое компоненты в 1С-Битрикс: типы компонентов, шаблоны, параметры, подключение на странице, кастомизация и создание собственного компонента.

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

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

Что такое компонент и из чего он состоит

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

Стандартный компонент — это папка внутри пространства имён модуля, например bitrix:news.list или bitrix:catalog.element. В папке обычно находятся: component.php (основная логика), .parameters.php (описание параметров для визуального редактора), .description.php (название и иконка в дереве компонентов), папка templates с шаблонами и файл class.php, если компонент построен на классе.

При вызове компонента на странице Битрикс передаёт ему массив параметров, выполняет логику, затем подключает указанный шаблон и передаёт в него результат в массиве $arResult. Разработчик шаблона работает именно с этим массивом, не обращаясь к базе напрямую.

Виды компонентов: простые, комплексные и системные

Простые компоненты выполняют одну функцию: news.list выводит список элементов, news.detail — один элемент, main.include — включаемую область. Они предсказуемы, легко кешируются и используются как кирпичики при сборке страницы.

Комплексные компоненты объединяют несколько простых внутри себя и управляют ЧПУ-адресами. Пример — bitrix:news или bitrix:catalog: один такой компонент обслуживает и раздел со списком, и детальные страницы, и поиск, формируя человекопонятные URL вида /catalog/phones/123/. Это удобно для типовых разделов, но усложняет кастомизацию, потому что шаблон комплексного компонента содержит вложенные вызовы простых.

Отдельно стоит выделить системные компоненты ядра (авторизация, регистрация, восстановление пароля, меню) и компоненты сторонних модулей из Маркетплейса. Последние живут в собственных пространствах имён и обновляются вместе с модулем.

Простой или комплексный компонент

Простой (news.list, catalog.element)

Подходит для отдельных блоков и нестандартных страниц. Полный контроль над URL и выводом, но маршрутизацию и хлебные крошки настраиваете сами.

Комплексный (news, catalog)

Подходит для типовых разделов с ЧПУ. Быстрый старт и готовые адреса страниц, но глубокая кастомизация сложнее из-за вложенной структуры шаблонов.

Как разместить и настроить компонент на странице

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

В коде страницы компонент подключается вызовом $APPLICATION->IncludeComponent() с именем компонента, именем шаблона и массивом параметров. Такой способ предпочтителен в шаблонах сайта и при версионировании кода через Git, потому что вызов хранится в файле, а не в базе данных.

php
<?$APPLICATION->IncludeComponent(
	"bitrix:news.list",
	"main_news",
	[
		"IBLOCK_TYPE" => "news",
		"IBLOCK_ID" => "1",
		"NEWS_COUNT" => "4",
		"CACHE_TYPE" => "A",
		"CACHE_TIME" => "3600"
	]
);?>

Обратите внимание на параметры кеширования: CACHE_TYPE со значением «A» означает «кешировать по умолчанию согласно настройкам сайта», «Y» — всегда кешировать, «N» — не кешировать. Для динамичных данных (корзина, личный кабинет) кеширование либо отключают, либо используют композитный режим с динамическими областями.

Как вывести список новостей на главной
  1. 1
    Создайте инфоблок типа «Новости» и наполните его элементами.
  2. 2
    Откройте главную страницу в режиме правки и перетащите компонент «Список новостей» (news.list) в нужную область.
  3. 3
    В параметрах укажите тип инфоблока, сам инфоблок и количество выводимых элементов.
  4. 4
    Отметьте поля и свойства, которые нужны в шаблоне (детальная картинка, дата, текст анонса).
  5. 5
    Сохраните страницу и проверьте вывод в публичной части, предварительно сбросив кеш.

Шаблоны компонентов и их кастомизация

Шаблон определяет, как именно данные из $arResult превращаются в HTML. У одного компонента может быть несколько шаблонов: системный .default и любые пользовательские. Имя шаблона передаётся вторым аргументом при подключении компонента.

Главное правило безопасной кастомизации: никогда не правьте шаблон внутри папки /bitrix/components/ — при обновлении платформы изменения будут перезаписаны. Вместо этого скопируйте шаблон в шаблон сайта: в визуальном редакторе есть кнопка «Копировать шаблон», либо вручную разместите папку шаблона в /local/templates/шаблон_сайта/components/пространство/компонент/шаблон/. Битрикс автоматически подхватит шаблон оттуда.

Внутри шаблона чаще всего правят файлы template.php (основная разметка), result_modifier.php (дополнительная обработка $arResult перед выводом, например ресайз картинок) и component_epilog.php (код, выполняемый после кеширования — установка заголовков, хлебных крошек, SEO-тегов). Понимание роли каждого файла избавляет от типичной ошибки, когда логику, зависящую от текущего пользователя, помещают в кешируемую часть.

Параметры, кеширование и производительность

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

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

Контрольные точки

Как проверить работу компонента

Повторная загрузка страницы
Норма

Страница открывается заметно быстрее, запросов к базе меньше

Тревожный признак

Время загрузки не меняется — кеширование отключено или сбрасывается

Вывод данных в шаблоне
Норма

В $arResult присутствуют все запрошенные поля и свойства

Тревожный признак

Поля пустые — не отмечены в параметрах компонента или нет прав на инфоблок

Права доступа
Норма

Компонент виден всем нужным группам пользователей

Тревожный признак

Гости видят пустой блок — у группы нет права чтения инфоблока

Создание собственного компонента

Когда стандартных компонентов не хватает — например, нужен вывод данных из собственной таблицы или нестандартная виджет-логика — пишут свой компонент. Размещают его в /local/components/ваше_пространство/имя_компонента/. Минимальный набор: class.php или component.php с логикой, .parameters.php и папка templates/.default/ с template.php.

Современный подход — компонент на классе, наследуемый от CBitrixComponent: в методе executeComponent() выполняется выборка данных через ORM Битрикса (например, \Bitrix\Iblock\Elements\Element... или CIBlockElement::GetList), результат помещается в $this->arResult, затем вызывается $this->includeComponentTemplate(). Такой компонент легко тестировать и расширять.

Маршрут решения

Что выбрать под задачу

Нужно изменить только внешний вид выводаСкопируйте шаблон компонента в шаблон сайта и правьте его
Нужно немного изменить состав данныхИспользуйте result_modifier.php в скопированном шаблоне
Нужна другая логика выборки или фильтрацииСоздайте наследника компонента или свой компонент в /local/components/
Нужен простой статичный блок с редактируемым текстомИспользуйте включаемую область (main.include) вместо компонента

После создания компонент появляется в дереве визуального редактора автоматически — достаточно корректно заполнить .description.php. Проверяйте работу на тестовой странице: сначала без кеша, затем включите кеширование и убедитесь, что данные обновляются при изменении источника.

Типичные ошибки при работе с компонентами

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

Типичные ошибки
01
Правка файлов в /bitrix/components/ — изменения стираются при первом же обновлении платформы.
02
Вывод пользовательских данных (корзина, скидки) в кешируемой части шаблона — один посетитель видит данные другого. Используйте component_epilog.php или динамические области композита.
03
Отключение кеширования «на всякий случай» — страница начинает выполнять десятки запросов к базе при каждом хите.
04
Вызов компонента в цикле внутри шаблона другого компонента — резкий рост нагрузки; правильнее собрать данные одним запросом.
05
Хранение логики в template.php — шаблон становится неподдерживаемым; логику выносят в class.php или result_modifier.php.

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

Ограничения и когда компонент не нужен

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

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

Итог

Что важно запомнить

Компонент — это связка логики, параметров и шаблона. Простые компоненты выводят отдельные блоки, комплексные — целые разделы с ЧПУ. Шаблоны правьте только в шаблоне сайта, собственные компоненты размещайте в /local/components/, кеширование включайте осознанно, а пользовательские данные выводите вне кеша.

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

Чем компонент отличается от модуля в Битрикс?

Модуль — это крупная функциональная единица (инфоблоки, интернет-магазин, форум), которая содержит классы, таблицы, страницы администрирования и компоненты. Компонент — лишь визуальная часть, которая использует API модуля для вывода данных на странице. Один модуль обычно включает десятки компонентов.

Где физически лежат файлы компонентов?

Стандартные — в /bitrix/components/bitrix/, компоненты сторонних модулей — в папках своих пространств имён внутри /bitrix/components/. Пользовательские компоненты принято размещать в /local/components/своя_папка/, а скопированные шаблоны — в /local/templates/шаблон_сайта/components/.

Как передать в компонент свой параметр?

Добавьте ключ в массив параметров при вызове IncludeComponent() и опишите этот параметр в файле .parameters.php компонента, чтобы он был доступен в визуальном редакторе. Внутри компонента значение будет доступно в массиве $arParams.

Почему после изменения данных на сайте ничего не поменялось?

Чаще всего причина в кеше компонента или композитном кеше страницы. Сбросьте кеш через панель управления («Сбросить кеш») или настройте тегированный кеш, чтобы он сбрасывался автоматически при изменении связанных инфоблоков. Также проверьте, не включён ли режим автокеширования с большим временем жизни.

Можно ли использовать компоненты вне шаблона сайта, например в API или агентах?

Технически вызвать компонент можно почти откуда угодно, но для задач без HTML-вывода (обмены, интеграции, фоновые операции) правильнее обращаться напрямую к API модулей и ORM. Компонент задуман как слой отображения, и его вызов вне контекста страницы создаёт лишнюю нагрузку и неочевидные зависимости.

Что такое result_modifier.php и когда его использовать?

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