Введение:
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/