Структура компонента в 1С-Битрикс: полный разбор файлов и папок

Содержание

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

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


Где размещать компоненты?

Компоненты группируются по пространствам имён в двух основных папках:

Папка Назначение
/bitrix/components/ Системные компоненты ядра (например, bitrix:news, bitrix:catalog). Не рекомендуется размещать здесь свои компоненты
/local/components/ Рекомендуемое место для пользовательских компонентов. Это гарантирует, что ваш код не будет затронут обновлениями системы

Структура внутри /local/components/ выглядит так:

/local/components/
└── my/                         # Пространство имён (namespace)
    └── user.card/              # Название компонента
        ├── .description.php
        ├── .parameters.php
        ├── class.php           # или component.php
        ├── templates/
        │   └── .default/
        │       ├── template.php
        │       ├── style.css
        │       └── script.js
        └── lang/
            └── ru/
                └── messages.php

Полное имя компонента формируется как пространство_имён:название_компонента. Например, my:user.card.


Основные файлы и папки компонента

Разберём каждый элемент структуры подробно.


1. Файл component.php — «сердце» компонента (логика)

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

  • обработка входящих параметров ($arParams);

  • подключение необходимых модулей;

  • запросы к базе данных;

  • формирование массива $arResult для передачи в шаблон;

  • вызов шаблона через includeComponentTemplate().

Важное правило: в component.php не должно быть HTML-вёрстки. Это файл только для логики.

<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

// Получаем ID пользователя из параметров
$userId = intval($arParams['USER_ID']);

// Запрашиваем данные пользователя
$arResult['USER'] = CUser::GetByID($userId)->Fetch();

// Подключаем шаблон для вывода
$this->includeComponentTemplate();

2. Файл class.php — современная альтернатива component.php

В современных проектах на D7 рекомендуется использовать class.php вместо component.php.

Преимущества подхода с классом:

  • инкапсуляция всего кода в одном классе;

  • возможность повторно использовать методы, данные и параметры компонента;

  • более чистая и поддерживаемая архитектура.

Класс компонента должен наследоваться от CBitrixComponent и реализовывать метод executeComponent().

<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

class UserCardComponent extends CBitrixComponent
{
    public function executeComponent()
    {
        $this->arResult['USER'] = CUser::GetByID(
            intval($this->arParams['USER_ID'])
        )->Fetch();
        
        $this->includeComponentTemplate();
    }
}

Важно: файл должен называться именно class.php (все буквы строчные), так как в Linux регистр имеет значение.


3. Файл .parameters.php — описание входных параметров

Этот файл описывает настройки компонента, которые будут отображаться в визуальном редакторе. Здесь содержится массив $arComponentParameters, в котором перечисляются все параметры, доступные для настройки.

<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

$arComponentParameters = [
    'GROUPS' => [
        'USER_CARD' => [
            'NAME' => 'Параметры карточки пользователя',
        ],
    ],
    'PARAMETERS' => [
        'USER_ID' => [
            'NAME' => 'Идентификатор пользователя',
            'TYPE' => 'NUMBER',
            'PARENT' => 'USER_CARD',
        ],
        'SHOW_EMAIL' => [
            'NAME' => 'Показывать email',
            'TYPE' => 'CHECKBOX',
            'DEFAULT' => 'Y',
            'PARENT' => 'USER_CARD',
        ],
    ],
];

Важно: этот файл не подключается при работе самого компонента на странице, он используется только в визуальном редакторе и режиме редактирования сайта.


4. Файл .description.php — описание компонента

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

<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

$arComponentDescription = [
    'NAME' => 'Карточка пользователя',
    'DESCRIPTION' => 'Выводит карточку с информацией о пользователе',
    'PATH' => [
        'ID' => 'my',
        'NAME' => 'Мои компоненты',
    ],
];

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


5. Папка templates/ — шаблоны отображения

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

Основные файлы шаблона:

Файл Назначение
template.php Главный файл шаблона. Выводит HTML, используя данные из $arResult. Здесь не следует делать запросы к БД — только циклы, условия и echo
style.css Стили для шаблона
script.js JavaScript-логика для шаблона
result_modifier.php Промежуточный файл, подключается перед template.php. Здесь разрешено делать дополнительные запросы к БД и модифицировать $arResult
component_epilog.php Подключается после template.php. Используется для операций, которые нельзя выполнять в области кеширования

6. Папка lang/ — локализация

Папка содержит языковые файлы для перевода компонента на разные языки. Для каждого языка создаётся отдельная подпапка (например, ru/, en/). Внутри неё располагаются файлы с теми же названиями, что и в корне компонента, содержащие массивы с переводами.

lang/
└── ru/
    ├── .description.php
    ├── .parameters.php
    └── messages.php

Принцип MVC в компонентах Битрикс

Компоненты 1С-Битрикс реализуют принцип разделения логики и представления, схожий с паттерном MVC (Model-View-Controller):

Компонент MVC В Битрикс
Model (данные) Запросы к БД в component.php / class.php
View (представление) template.php и файлы шаблона
Controller (управление) component.php / class.php

Такой подход позволяет менять дизайн (шаблон), не затрагивая логику, и наоборот.


Ключевые переменные: $arParams и $arResult

В работе с компонентами вы постоянно будете встречать два ключевых массива:

Переменная Назначение Где доступна
$arParams Входные параметры компонента (настройки, переданные при вызове) В component.php и в шаблоне
$arResult Результат работы логики — данные, подготовленные для вывода Формируется в component.php, используется в шаблоне

Краткий чек-лист структуры компонента

Файл/папка Обязательность Назначение
component.php или class.php Обязательный Логика компонента
.parameters.php Опционально (если есть настройки) Описание параметров для редактора
.description.php Опционально Описание для визуального редактора
templates/.default/template.php Обязательный HTML-шаблон вывода
templates/.default/style.css Опционально Стили
templates/.default/script.js Опционально JavaScript
lang/ Опционально Локализация

Итог

Мы разобрали полную структуру компонента в 1С-Битрикс: от места размещения до каждого файла и папки. Теперь вы знаете:

  • где создавать свои компоненты (/local/components/);

  • какие файлы обязательны, а какие опциональны;

  • чем отличается component.php от class.php;

  • как работают $arParams и $arResult;

  • зачем нужны result_modifier.php и component_epilog.php.

В следующей статье мы перейдём к практике и создадим первый рабочий компонент «Hello, World!» с нуля. Подписывайтесь, чтобы не пропустить!


Есть вопросы или хотите дополнить статью? Пишите в комментариях — обсудим!

Комментарии
Оставить комментарий
Form comments
Еще больше о нас и нашей деятельности
Послушать подкасты в аудиоформате: Wave, Podcasts.apple, Яндекс, Звук

Ещё больше крутых статей — в нашем Telegram-канале. Подписывайтесь, чтобы быть в курсе всех событий!