Введение:
1С-Битрикс – популярная система управления контентом (CMS) в России и странах СНГ. Ее гибкость и функциональность во многом обеспечиваются модульной архитектурой и компонентным подходом.
В этой статье мы подробно рассмотрим структуру компонентов и модулей в 1С-Битрикс, что позволит вам лучше понимать принципы работы системы и создавать собственные решения.
1. Модули: строительные блоки функционала
Модуль — это самостоятельный функциональный блок, который может быть установлен и удален независимо от других частей системы. Модули служат для расширения ядра 1С-Битрикс, добавления новой функциональности, интеграции с внешними сервисами. Модули – это автономные блоки кода, которые инкапсулируют определенную логику и предоставляют интерфейсы для взаимодействия с другими частями системы.
Структура модуля:
Файлы модуля располагаются в папке /bitrix/modules/ID модуля/.
Каждый модуль размещается в отдельной папке в директории /bitrix/modules/. Имя папки соответствует уникальному идентификатору модуля (например, mycompany.mymodule).
Структура папки модуля:
- admin/ – каталог с административными скриптами;
- menu.php – файл с административным меню;
 - [название_страницы].php – файлы, реализующие страницы административного интерфейса модуля;
 
 - classes/ – скрипты с классами модуля (устаревшая структура, рекомендуется использовать lib/ для D7);
- general/ – классы, не зависящие от используемой базы данных;
 - mysql/ – классы, предназначенные для работы только с MySQL;
 - mssql/ – классы, предназначенные для работы только с MS SQL;
 - oracle/ – классы, предназначенные для работы только с Oracle;
 
 - lang/ID языка/ – каталог с языковыми файлами;
 - lib/ – каталог с файлами (API: классы, логика) нового ядра D7 (может не присутствовать, если у модуля нет собственных методов). Соответствует стандарту PSR-4 для автозагрузки классов;
 - install/ – каталог с файлами используемыми для инсталляции и деинсталляции модуля;
- admin/ – каталог со скриптами подключающими административные скрипты (вызывающие скрипты);
 - js/ – каталог с js-скриптами модуля. Копируются в /bitrix/js/ID_модуля/;
 - db/ – каталог с SQL скриптами для инсталляции/деинсталляции базы данных;
- mysql/ – SQL скрипты для инсталляции/деинсталляции таблиц в MySQL;
 - mssql/ – SQL скрипты для инсталляции/деинсталляции таблиц в MS SQL;
 - oracle/ – SQL скрипты для инсталляции/деинсталляции таблиц в Oracle;
 
 - images/ – каталог с изображениями; после инсталляции модуля они должны быть скопированы в каталог /bitrix/images/ID модуля/;
 - index.php – главный файл установки/удаления модуля. Здесь прописываются действия по регистрации модуля в системе, созданию таблиц в базе данных, копированию файлов и т.д.;
 - version.php – файл с информацией о версии модуля;
 - unstep.php – *файлы шагов удаления модуля;
 - step.php – *файлы шагов установки модуля;
 
 - templates/ – каталог с компонентами 1.0. (Сохраняется только с целью совместимости версий.);
- ID модуля/ – каталог с основными файлами компонентов;
 - lang/ID языка/ID модуля/ – каталог с языковыми файлами компонентов;
 
 - components/пространство имен/имя компонента/ – каталог с компонентами 2.0;
 - themes/имя_модуля/ – css и картинки для стилей административной панели, если модуль в таковых нуждается (Устаревшая, до версии 12.0);
 - panel/имя_модуля/ – css и картинки для стилей административной панели, если модуль в таковых нуждается;
 - index.php – файл с описанием модуля;
 - version.php – файл с номером версии. Версия не может быть равной нулю;
 - include.php – файл подключается в тот момент, когда речь идет о подключении модуля в коде, в нем должны находиться включения всех файлов с библиотеками функций и классов;
 - default_option.php – содержит массив с именем $ID модуля_default_option, в котором заданы значения по умолчанию для параметров модуля;
- Примечание: В случае партнерских модулей, в названии которых содержится точка (пример – mycompany.forum) в имени переменной точка будет автоматически заменена на символ подчеркивания;
 
 - options.php – файл подключается на странице настройки параметров модулей в административном меню Настройки;
 - prolog_admin.php – файл должен подключаться во всех административных скриптах модуля. Обычно в нем определяется константа ADMIN_MODULE_NAME (идентификатор модуля), используемая в панели управления;
 - .settings.php – файл настроек, описывающий настройки модуля, которые можно прочитать через \Bitrix\Main\Config\Configuration::getInstance($module).
 
2. Компоненты: кирпичики для отображения контента
Компонент — это фрагмент кода, отвечающий за отображение определенной части страницы. Компоненты делятся на простые и комплексные. Компоненты – это блоки кода, отвечающие за вывод определенной информации на страницах сайта. Они позволяют создавать гибкие и многократно используемые элементы интерфейса.
- Простые компоненты: Выводят информацию без изменения структуры сайта (например, вывод списка новостей, формы обратной связи).
 - Комплексные компоненты: Управляют структурой страницы, формируя целые разделы (например, каталог товаров, форум).
 
Структура компонента:
Компоненты размещаются в папке /bitrix/components/ внутри папок, соответствующих пространству имен (например, mycompany/news.list).
Компоненты располагаются в папке /bitrix/components/пространство_имен/название_компонента. Пространство имен – это способ организации компонентов, например, bitrix (системные компоненты) или custom (пользовательские компоненты).
Структура простого компонента в 1С-Битрикс
Основные принципы простого компонента:
- Инкапсуляция: Компонент хранит все необходимое для работы в своей папке, обеспечивая переносимость и независимость.
 - Неделимость: Компонент представляет собой единый функциональный блок, его файлы не предназначены для использования по отдельности.
 
Структура папки компонента:
Помимо уже упомянутых вами элементов, рассмотрим более подробно некоторые аспекты и добавим важные детали:
lang/(папка с языковыми файлами):- Содержит переводы сообщений компонента для разных языков.
 - Важно: С версии 11.0 может включать подпапку 
help/с файлами подсказок для параметров компонента (файлы с суффиксом_TIP). - Пример: Файл 
lang/ru/.parameters.phpсодержит переводы названий параметров для русского языка, аlang/ru/help/.parameters.php— подсказки к этим параметрам. 
templates/(папка с шаблонами):- Определяет внешний вид компонента.
 .default/— шаблон по умолчанию: Обязательная папка, содержит файлы шаблона, который используется, если не указан другой.template.php: Основной файл шаблона, отвечает за вывод HTML-кода компонента.component_epilog.php: Подключается послеtemplate.phpи никогда не кешируется. Используется для выполнения действий на каждом хите (например, добавление JS-кода, установка заголовков).result_modifier.php: Позволяет модифицировать массив$arResultперед выводом в шаблоне. Используется для преобразования данных, добавления или удаления информации.script.js: JavaScript-файл шаблона, подключается автоматически.style.css: CSS-файл шаблона, подключается автоматически.
class.php: (Необязательно, но рекомендуется)- Используется для ООП-компонентов. Содержит класс компонента, реализующий основную логику.
 - Преимущества: Повышает читаемость, упрощает поддержку и расширение компонента.
 
component.php: (Обязательный)- Основной файл компонента, отвечает за логику работы.
 - Задача: Получить данные из входных параметров (
$arParams), выполнить необходимые действия (например, запросы к базе данных) и сформировать массив$arResultдля передачи в шаблон. 
.description.php: (Обязательный)- Содержит описание компонента, его название, путь к иконке и положение в дереве компонентов редактора.
 - Важно: Без этого файла компонент не будет отображаться в визуальном редакторе.
 
.parameters.php: (Необязательный, но нужен, если компонент имеет настраиваемые параметры)- Описывает входные параметры компонента, которые можно настроить в визуальном редакторе.
 - Формирует массив 
$arComponentParameters, который используется для создания формы настроек компонента. 
images/(папка с изображениями): (Необязательно)- Содержит изображения, используемые компонентом, например, иконка для редактора.
 
- Другие папки и файлы:
- Компонент может содержать любые другие папки и файлы, необходимые для его работы (например, библиотеки, вспомогательные классы).
 
 
Порядок подключения файлов в простом компоненте:
component.phpилиclass.php: Выполняется основная логика компонента, формируется массив$arResult.result_modifier.php: Модифицируется массив$arResult(если файл существует).template.php: Формируется HTML-вывод компонента на основе данных из$arParamsи$arResult.component_epilog.php: Выполняются дополнительные действия после вывода шаблона. Не кешируется (не обязательный).
Массивы $arParams и $arResult:
$arParams: Содержит входные параметры компонента, передаваемые при его вызове.- Важно: Ключи массива — это названия параметров, значения — их значения. Все значения проходят через 
htmlspecialcharsEx(). - Префикс 
~: Содержит исходные значения параметров без обработкиhtmlspecialcharsEx(). 
- Важно: Ключи массива — это названия параметров, значения — их значения. Все значения проходят через 
 $arResult: Содержит результаты работы компонента, которые передаются в шаблон.- Важно: Формируется в 
component.phpи может быть модифицирован вresult_modifier.php. 
- Важно: Формируется в 
 
Кеширование в компоненте:
CBitrixComponent::StartResultCache(): Метод для управления кешированием компонента.- Параметры: 
cacheTime,additionalCacheID,cachePath. CBitrixComponent::SetResultCacheKeys(): Определяет ключи массива$arResult, которые будут сохраняться в кеше.CBitrixComponent::IncludeComponentTemplate()илиCBitrixComponent::ShowComponentTemplate(): Завершают кеширование и выводят шаблон компонента.
Общая структура кода component.php:
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
// Проверка подключения модуля "Информационные блоки"
if (!\Bitrix\Main\Loader::includeModule('iblock')) {
    ShowError('Модуль «Информационные блоки» не установлен');
    return;
}
// Подготовка входных параметров
$arParams['CACHE_TIME'] = isset($arParams['CACHE_TIME']) ? intval($arParams['CACHE_TIME']) : 3600;
$arParams['ELEMENT_ID'] = isset($arParams['ELEMENT_ID']) ? intval($arParams['ELEMENT_ID']) : 0;
// Кеширование
if ($this->StartResultCache()) {
    if ($arParams['ELEMENT_ID']) {
        // Получение данных из базы данных
        $rsElement = CIBlockElement::GetList(/* ... */); 
        if ($arResult = $rsElement->GetNext()) {
            // Добавление дополнительных данных в $arResult
        }
    }
    if (isset($arResult['ID'])) {
        // Определяем ключи для кеширования
        $this->SetResultCacheKeys(array('ID', 'NAME'));
        // Подключаем шаблон
        $this->IncludeComponentTemplate();
    } else {
        $this->AbortResultCache();
        \Bitrix\Iblock\Component\Tools::process404('Страница не найдена', true, true);
    }
}
// Действия после кеширования (на каждом хите)
if (isset($arResult['ID'])) {
    CIBlockElement::CounterInc($arResult['ID']);
    $APPLICATION->SetTitle($arResult['NAME']);
}
?>Логика работы простого компонента:
- Получение входных параметров из массива 
$arParams. - Обработка данных:
- Запросы к базе данных.
 - Выполнение других необходимых операций.
 
 - Формирование массива 
$arResult, содержащего данные для вывода. - Подключение шаблона (
template.php) и передача в него массивов$arParamsи$arResult. - Вывод HTML-кода компонента на основе данных из шаблона.
 
Ключевые моменты:
- Четкая структура: Компонент должен иметь четкую и понятную структуру, чтобы его было легко поддерживать и модифицировать.
 - Использование API: Используйте API 1С-Битрикс для доступа к данным и выполнения операций.
 - Безопасность: Обрабатывайте входные параметры и избегайте уязвимостей.
 - Переносимость: Создавайте компоненты таким образом, чтобы их можно было легко переносить между проектами.
 
3. Взаимодействие модулей и компонентов:
Модули предоставляют API для работы с данными, а компоненты используют этот API для отображения информации на страницах.
Компоненты могут обращаться к классам и функциям модулей, используя глобальные переменные, пространства имен или автозагрузку.
Компоненты могут использовать функционал модулей для получения и обработки данных. Например, компонент новостей может использовать функции модуля «Информационные блоки» для выборки новостей из базы данных.
Модули, в свою очередь, могут предоставлять API для использования компонентами.
4. Ключевые преимущества использования компонентов и модулей:
- Модульность: Легко добавлять и удалять функциональные блоки, не затрагивая ядро системы.
 - Расширяемость: Возможность создавать собственные модули и компоненты для реализации специфических задач.
 - Переиспользуемость: Компоненты можно использовать многократно на разных страницах сайта.
 - Разделение ответственности: Четкое разделение логики и представления, что упрощает разработку и поддержку.
 - Гибкость: Настройка параметров компонентов позволяет адаптировать их под различные требования.
 
Заключение:
Понимание структуры компонентов и модулей в 1С-Битрикс является необходимым условием для эффективной разработки и поддержки сайтов на этой платформе.
Использование модульной архитектуры и компонентного подхода позволяет создавать гибкие, расширяемые и легко поддерживаемые решения.
Изучив данное руководство, вы сможете лучше ориентироваться в структуре 1С-Битрикс и создавать собственные модули и компоненты.
Модули и компоненты — это два ключевых элемента архитектуры 1С-Битрикс D7.
Понимание их структуры и принципов работы необходимо для создания качественных и расширяемых проектов.
Используя возможности модулей и компонентов, разработчики могут создавать сложные и функциональные веб-сайты, отвечающие требованиям современных пользователей.
Структура модулей и компонентов – основа разработки на 1С-Битрикс.
Подробнее на официальном сайте: https://dev.1c-bitrix.ru/