Найти тему
Программист - турист

Битрикс. Как правильно создать модуль

Оглавление

Примером будет служить модуль, который запрещает создавать элементы инфоблока в определенные дни.

В основе будут handler для отлавливания событий.

Пишем хэндлер

На этом шаге всё до банальности просто и качественно задокументировано.
Пользуясь хэндлером
OnBeforeIBlockElementAdd
и
близких к нему мы создаём функцию, блокирующую редактирование в определённое время

function lock($arParams) {
if (in_array(date(‘w’),array(0,6) || date(‘H’)>18 || date(‘H’)<9) {
global $APPLICATION;
$APPLICATION->throwException("Нельзя!"); return false; }
}

Вынесем надпись в настройки модуля, чтобы научиться это делать.
Итак, для хранения настроек модулей существует
класс COption. Добавим это в нашу функцию:

global $APPLICATION; $APPLICATION->throwException(COption::GetOptionString("russianpostjoke", "WE_ARE_CLOSED_TEXT", "У нас закрыто!")); return false;

Разумеется, ниже мы рассмотрим, как сделать админку, позволяющую редактировать настройки модуля. Также хочется предупредить, что класс COption умеет хранить только два типа настроек — integer и string. К сожалению, поддержки массивов не существует и в случае необходимости её придётся реализовывать окольными путями, например, с помощью таблицы.

Создаем модуль (болванку)

Создайте в папке bitrix/modules папку russianpostjoke. Это будет папка нашего модуля.
О том, какие файлы и почему нужно создать в папке можно прочитать в
официальной документации.
Дабы не засорять статью листингами, предлагаю изучить исходники на гитхабе:
https://github.com/may-cat/bitrix-dull-module

Возможные ошибки:
Если Вы создадите модуль и в названии будет присутствовать точка, возможно Вы не увидите его в списке модулей в админке. Битрикс преобразует точку в подчёркивание в названии класса и функций. Внимательно изучите исходники Битрикса и/или чужие модули, если собираетесь использовать точку.

Итак, заменив в вышеприведённой “болванке” название модуля на russianpostjoke везде, где это необходимо, мы получили нашу заготовку.
Перейдём к наполенению её необходимым функционалом.

Наполняем модуль функционалом

Создадим класс cBlocker и разместим его в папке russianpostjoke/classes/general/cMainRPJ.php — туда мы внедрим наш хэндлер в качестве метода.

Теперь, нам необходимо прописать установку модуля. Воспользуемся файлом
russianpostjoke/install/index.php в котором есть методы DoInstall() и DoUninstall().
При этом в нашем случае необходимо выполнить три условия:
а) Воспользоваться функцией
RegisterModuleDependences, чтобы установить в систему наш хэндлер из класса cBlocker, привязав его к штатным OnBeforeIBlockElementAdd и подобным.
б) Сообщить системе, что модуль установлен. Нам поможет RegisterModule($this->MODULE_ID);
в) Вызвать вывод сообщения для пользователя:

$APPLICATION->IncludeAdminFile("Установка модуля russianpostjoke", $DOCUMENT_ROOT."/bitrix/modules/russianpostjoke/install/step.php");

Обратите внимание, что этот вызов должен осуществляться последним, прямо перед конструкции return.

В результате, Вы должны увидеть у себя в админке нечто подобное:

Появившийся модуль можно установить и сразу после установки наш заявленный функционал будет работать.
Появившийся модуль можно установить и сразу после установки наш заявленный функционал будет работать.

Админка

Если сейчас зайти в административной панели Битрикса на страницу Настройки / Настройки продукта / Настройки модулей / %Заглавие нашего модуля% то можно увидеть… ничего. А между тем, именно на этой странице должны находиться настройки нашего модуля.
Интересующая нас страница задаётся файлом russianpostjoke/options.php, и с этим связаны хорошие и плохие новости.
Плохая новость — все настройки, включая сохранение настроек, на данном этапе развития Битрикса, задаются этим файлом, зачастую в виде “простыни”.
Хорошая новость — многое уже сделали до вас, и можно воспользоваться существующими наработками. Рекомендую обратить внимание на то, как описаны настройки “Монитора производительности” (perfmon) — они достаточно просты для понимания.
Нам необходимо создать настройки одного-единственного поля WE_ARE_CLOSED_TEXT, которое мы использовали на шаге №1.
Полные исходники модуля выложены на гитхабе:
https://github.com/may-cat/bitrix-russianpostjoke

Вместо заключения

Мы рассмотрели самый простейший модуль, есть о чём рассказать ещё минимум на 3 статьи. Если тебе, %username%, оказался полезным этот материал, или ты, как и я, хочешь улучшения уровня разработчиков под 1С-Битрикс, поддержи статью. Спасибо.

Update
Для нового ядра D7 сделал новую «Заготовку» под модуль.
Скачать и поковыряться с ней можно на гитхабе:
github.com/may-cat/maycat.d7dull
Пулл-реквесты приветствуются.

-2