Структура компонента Битрикс

Более подробно описано в


Структура компонента

/local/components/
└── namespace/
    └── news.list/
        ├── lang/
        │   └── ru/
        │       ├── .description.php
        │       └── .parameters.php
        ├── templates/
        │   └── .default/
        │       ├── template.php
        │       ├── result_modifier.php
        │       ├── component_epilog.php
        │       ├── script.js
        │       └── style.css
        ├── .description.php
        ├── .parameters.php
        ├── ajax.php
        ├── class.php
        └── component.php

Общая структура компонента

Компоненты в Битрикс размещаются в одной из двух директорий:

  • /bitrix/components/ - для системных компонентов

  • /local/components/ - для пользовательских компонентов

Рекомендуется размещать собственные компоненты в папке /local/components/, так как это обеспечивает изоляцию пользовательского кода от системных файлов и упрощает обновления системы

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

1. Корневая папка компонента

  • Название: namespace/component.name/ (например: demo/news.list/)

  • Назначение: Содержит все файлы компонента. Название папки соответствует имени компонента .

2. Файл class.php

  • Назначение: Основной файл компонента, содержащий бизнес-логику при использовании ООП-подхода (D7). Содержит класс, наследуемый от CBitrixComponent .

  • Обязательность: Обязателен для компонентов, использующих D7-подход.

  • Пример содержимого:

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

class ExampleComponent extends CBitrixComponent
{
    public function executeComponent()
    {
        // Логика компонента
        $this->arResult['DATA'] = $this->getData();
        $this->includeComponentTemplate();
    }

    private function getData()
    {
        // Получение данных
        return ['example' => 'data'];
    }
}

3. Файл component.php

  • Назначение: Альтернативный основной файл компонента, используется в устаревшем процедурном подходе. Содержит логику компонента и формирует массив $arResult для передачи в шаблон .

  • Обязательность: Обязателен, если не используется class.php.

4. Файл .description.php

  • Назначение: Содержит описание компонента для отображения в визуальном редакторе Битрикс .

  • Обязательность: Не обязателен, но без него невозможно размещение компонента через визуальный редактор.

  • !!! Важно: из-за ошибок в этом файле возникают ошибки при сохранении страниц/элементов в публичной части в режиме правки. Иногда довольно трудно отдебажить этот момент. Так что имейте в виду.

  • Пример содержимого:

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

$arComponentDescription = [
    "NAME" => "Пример компонента",
    "DESCRIPTION" => "Описание компонента",
    "PATH" => [
        "ID" => "demo_components",
        "NAME" => "Мои компоненты",
    ],
];

5. Файл .parameters.php

  • Назначение: Содержит описание входных параметров компонента, которые настраиваются в административной части .

  • Обязательность: Обязателен, если компонент имеет настраиваемые параметры.

  • Пример содержимого:

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

$arTemplateParameters = array(
    'SLIDER_EFFECT' =>  array(
        'NAME'      =>  'Эффект смены слайдов',
        'TYPE'      =>  'LIST',
        'SORT'      =>  '10',
        'VALUES'    =>  array(
            'sliding'   =>  'Скольжение',
            'fading'    =>  'Затухание',
        ),
        'MULTIPLE'  =>  'N',
    ),
    'SLIDER_TIME'   =>  array(
        'NAME'      =>  'Скорочть смены слайдов (мс)',
        'TYPE'      =>  'STRING',
        'SORT'      =>  '20',
        'DEFAULT'   =>  '5000',
    ),
);

6. Папка lang/

  • Назначение: Содержит языковые файлы для локализации компонента .

  • Структура: Содержит подпапки с кодами языков (ru, en и т.д.) внутри, которых языковые файлы.

  • Обязательность: Не обязательна, но рекомендуется для многоязычных сайтов.

  • Пример содержимого:

<?php
// news.list/lang/ru/component.php
$MESS ['T_NEWS_NEWS_NA'] = "Раздел не найден.";
$MESS ['IBLOCK_MODULE_NOT_INSTALLED'] = "Модуль Информационных блоков не установлен";

7. Папка templates/

  • Назначение: Содержит шаблоны отображения компонента .

  • Структура: Содержит подпапки с различными шаблонами (.default, custom_template и т.д.).

  • Обязательность: Не обязательна, если компонент не имеет визуального представления.

8. Папка templates/.default/

  • Назначение: Содержит шаблон по умолчанию для компонента .

  • Обязательность: Рекомендуется иметь хотя бы один шаблон.

  • шаблон .default подключается автоматически, если не указан шаблон в вызове компонента.

9. Файл templates/.default/template.php

  • Назначение: Основной файл шаблона, отвечающий за визуальное представление компонента .

  • Обязательность: Обязателен, если используется шаблон.

10. Файл script.js

  • Назначение: Содержит JavaScript-код для компонента . Подключается автоматически.

  • Обязательность: Не обязателен.

11. Файл style.css

  • Назначение: Содержит CSS-стили для компонента . Подключается автоматически.

  • Обязательность: Не обязателен.

12. Папка images/

  • Назначение: Содержит изображения и другие медиаресурсы для компонента .

  • Обязательность: Не обязательна.

13. Файл result_modifier.php

  • Назначение: Позволяет модифицировать массив $arResult перед передачей в шаблон . Кешируется.

  • Расположение: В папке шаблона (templates/<template_name>/).

  • Обязательность: Не обязателен.

14. Файл component_epilog.php

  • Назначение: Подключается после файла шаблона и никогда НЕ кешируется .

  • Расположение: В папке шаблона (templates/<template_name>/).

  • Обязательность: Не обязателен.

Процесс работы компонента

  1. Инициализация: Битрикс загружает компонент и инициализирует его параметры.

  2. Выполнение логики: Выполняется код из class.php или component.php.

  3. Формирование результата: Логика компонента формирует массив $arResult.

  4. Обработка шаблона: Данные из $arResult передаются в шаблон для отображения.

  5. Кеширование: Результат работы компонента может быть закеширован для повышения производительности .

Рекомендации по разработке компонентов

  • Используйте D7-подход с классом в class.php вместо устаревшего component.php .

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

  • Выносите языковые константы в файлы в папке lang/.

  • Разделяйте логику и представление - вся HTML-разметка должна быть в шаблоне .

  • Используйте кеширование для повышения производительности компонента .

  • Для сложных компонентов создавайте несколько шаблонов отображения.