Более подробно описано в
Структура компонента
/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>/).
-
Обязательность: Не обязателен.
Процесс работы компонента
-
Инициализация: Битрикс загружает компонент и инициализирует его параметры.
-
Выполнение логики: Выполняется код из
class.phpилиcomponent.php. -
Формирование результата: Логика компонента формирует массив
$arResult. -
Обработка шаблона: Данные из
$arResultпередаются в шаблон для отображения. -
Кеширование: Результат работы компонента может быть закеширован для повышения производительности .
Рекомендации по разработке компонентов
-
Используйте D7-подход с классом в
class.phpвместо устаревшегоcomponent.php. -
Всегда добавляйте файл .description для удобства использования в визуальном редакторе, плюс этот файл обязателен при сдаче монитора качества.
-
Выносите языковые константы в файлы в папке
lang/. -
Разделяйте логику и представление - вся HTML-разметка должна быть в шаблоне .
-
Используйте кеширование для повышения производительности компонента .
-
Для сложных компонентов создавайте несколько шаблонов отображения.