Блог Горошко Андрея 1C-Битрикс Структура модулей и компонентов 1С-Битрикс: руководство для разработчиков

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

Введение:

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С-Битрикс

Основные принципы простого компонента:

  • Инкапсуляция: Компонент хранит все необходимое для работы в своей папке, обеспечивая переносимость и независимость.
  • Неделимость: Компонент представляет собой единый функциональный блок, его файлы не предназначены для использования по отдельности.

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

Помимо уже упомянутых вами элементов, рассмотрим более подробно некоторые аспекты и добавим важные детали:

  1. lang/ (папка с языковыми файлами):
    • Содержит переводы сообщений компонента для разных языков.
    • Важно: С версии 11.0 может включать подпапку help/ с файлами подсказок для параметров компонента (файлы с суффиксом _TIP).
    • Пример: Файл lang/ru/.parameters.php содержит переводы названий параметров для русского языка, а lang/ru/help/.parameters.php — подсказки к этим параметрам.
  2. templates/ (папка с шаблонами):
    • Определяет внешний вид компонента.
    • .default/ — шаблон по умолчанию: Обязательная папка, содержит файлы шаблона, который используется, если не указан другой.
      • template.php: Основной файл шаблона, отвечает за вывод HTML-кода компонента.
      • component_epilog.php: Подключается после template.php и никогда не кешируется. Используется для выполнения действий на каждом хите (например, добавление JS-кода, установка заголовков).
      • result_modifier.php: Позволяет модифицировать массив $arResult перед выводом в шаблоне. Используется для преобразования данных, добавления или удаления информации.
      • script.js: JavaScript-файл шаблона, подключается автоматически.
      • style.css: CSS-файл шаблона, подключается автоматически.
  3. class.php: (Необязательно, но рекомендуется)
    • Используется для ООП-компонентов. Содержит класс компонента, реализующий основную логику.
    • Преимущества: Повышает читаемость, упрощает поддержку и расширение компонента.
  4. component.php: (Обязательный)
    • Основной файл компонента, отвечает за логику работы.
    • Задача: Получить данные из входных параметров ($arParams), выполнить необходимые действия (например, запросы к базе данных) и сформировать массив $arResult для передачи в шаблон.
  5. .description.php: (Обязательный)
    • Содержит описание компонента, его название, путь к иконке и положение в дереве компонентов редактора.
    • Важно: Без этого файла компонент не будет отображаться в визуальном редакторе.
  6. .parameters.php: (Необязательный, но нужен, если компонент имеет настраиваемые параметры)
    • Описывает входные параметры компонента, которые можно настроить в визуальном редакторе.
    • Формирует массив $arComponentParameters, который используется для создания формы настроек компонента.
  7. images/ (папка с изображениями): (Необязательно)
    • Содержит изображения, используемые компонентом, например, иконка для редактора.
  8. Другие папки и файлы:
    • Компонент может содержать любые другие папки и файлы, необходимые для его работы (например, библиотеки, вспомогательные классы).

Порядок подключения файлов в простом компоненте:

  1. component.php или class.php: Выполняется основная логика компонента, формируется массив $arResult.
  2. result_modifier.php: Модифицируется массив $arResult (если файл существует).
  3. template.php: Формируется HTML-вывод компонента на основе данных из $arParams и $arResult.
  4. 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']);
}
?>

Логика работы простого компонента:

  1. Получение входных параметров из массива $arParams.
  2. Обработка данных:
    • Запросы к базе данных.
    • Выполнение других необходимых операций.
  3. Формирование массива $arResult, содержащего данные для вывода.
  4. Подключение шаблона (template.php) и передача в него массивов $arParams и $arResult.
  5. Вывод HTML-кода компонента на основе данных из шаблона.

Ключевые моменты:

  • Четкая структура: Компонент должен иметь четкую и понятную структуру, чтобы его было легко поддерживать и модифицировать.
  • Использование API: Используйте API 1С-Битрикс для доступа к данным и выполнения операций.
  • Безопасность: Обрабатывайте входные параметры и избегайте уязвимостей.
  • Переносимость: Создавайте компоненты таким образом, чтобы их можно было легко переносить между проектами.

3. Взаимодействие модулей и компонентов:

Модули предоставляют API для работы с данными, а компоненты используют этот API для отображения информации на страницах.

Компоненты могут обращаться к классам и функциям модулей, используя глобальные переменные, пространства имен или автозагрузку.

Компоненты могут использовать функционал модулей для получения и обработки данных. Например, компонент новостей может использовать функции модуля «Информационные блоки» для выборки новостей из базы данных.

Модули, в свою очередь, могут предоставлять API для использования компонентами.

4. Ключевые преимущества использования компонентов и модулей:

  • Модульность: Легко добавлять и удалять функциональные блоки, не затрагивая ядро системы.
  • Расширяемость: Возможность создавать собственные модули и компоненты для реализации специфических задач.
  • Переиспользуемость: Компоненты можно использовать многократно на разных страницах сайта.
  • Разделение ответственности: Четкое разделение логики и представления, что упрощает разработку и поддержку.
  • Гибкость: Настройка параметров компонентов позволяет адаптировать их под различные требования.

Заключение:

Понимание структуры компонентов и модулей в 1С-Битрикс является необходимым условием для эффективной разработки и поддержки сайтов на этой платформе.

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

Изучив данное руководство, вы сможете лучше ориентироваться в структуре 1С-Битрикс и создавать собственные модули и компоненты.

Модули и компоненты — это два ключевых элемента архитектуры 1С-Битрикс D7.

Понимание их структуры и принципов работы необходимо для создания качественных и расширяемых проектов.

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

Структура модулей и компонентов – основа разработки на 1С-Битрикс. 

Подробнее на официальном сайте: https://dev.1c-bitrix.ru/

Средний рейтинг
Еще нет оценок

Добавить комментарий

Related Post

Обновление свойств элемента инфоблока 1с BitrixОбновление свойств элемента инфоблока 1с Bitrix

SetPropertyValuesEx() — это метод для сохранения значений свойств элемента информационного блока в БД. Этот метод более экономен в количестве запросов к БД, чем SetPropertyValues(), потому что может не содержать полный

Обновление количества товара на складе в BitrixОбновление количества товара на складе в Bitrix

Обновление количества товара на складе в Bitrix можно сделать так В коде ниже происходит следующее: Средний рейтинг Еще нет оценок

Правильное использование BB кода в 1С-БитриксПравильное использование BB кода в 1С-Битрикс

В 1С-Битрикс BB код используется для форматирования текста в различных модулях, таких как форумы, задачи, блоги и комментарии. Для его обработки используется класс CTextParser. Вот несколько основных правил использования BB