Расширение функционала Bitrix 24/Модуль

Базовая структура модуля для Битрикс описана тут, 1.


Копируем пустой шаблон и добавляем нужные файлы, например .settings.php и .settings_extra.php.

После замены синтаксических плейсхолдеров вида: , можно устанавливать модуль. Для этого нужно перейти по адресу https://bx24_host_name/bitrix/admin/ и авторизоваться в административной части bx24. Установка локальных модулей производится из раздела "Marketplace" -> "Установленные решения".

В файле options.php нужно убрать:

use Bitrix\Main\Text\String;

и заменить

String::htmlEncode

на \Bitrix\Main\Text\HtmlFilter::encode

Добавить:

if (CAutoSave::Allowed()) {
    $AUTOSAVE = new CAutoSave();
    $AUTOSAVE->Init();
}

Для хранения настроек пользователя используется таблица b_option и файлы настроек по умолчанию, такие как default_option.php. Доступ к настройкам по умолчанию осуществляется через метод getDefaults. Более подробную информацию о хранении настроек можно прочитать тут.

Для размещения своего компонента в пространстве имен Битрикс [|используется копирование] на этапе установки[1]:

public function installFiles() {
        // копируем файлы компонентов, которые устанавливаем вместе с модулем;
        // пространством имен для компонентов будет имя модуля, т.е. infoblock
        CopyDirFiles(
            __DIR__.'/assets/components',
            Application::getDocumentRoot().'/local/components/'.$this->MODULE_ID.'/',
            true,
            true
        );
    }

Расширение API Битрикс

править

Как добавить в REST API новые методы описано тут.

Создание разделов

править

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

Для вывода табличных данных можно использовать встроенные компоненты и набор JS библиотек.

Модель БД (ORM)

править

Таблицы в БД создаются классами производными от DataManager

Типы данных:

EnumField
DateField
DatetimeField
BooleanField
TextField
FloatField
ArrayField

Описание поля с валидацией и маской формата:

new Entity\StringField('ISBN', array(
                'required' => true,
                'column_name' => 'ISBNCODE',
                'format' => '/^\d{12}$/',
                'validation' => function() {
                    return array(
                        new Entity\Validator\RegExp('/\d{13}/'),
                        function ($value, $primary, $row, $field) {
                            // проверяем последнюю цифру
                            // ...
                            // если цифра неправильная - возвращаем особую ошибку
                            return new Entity\FieldError(
                                $field, 'Контрольная цифра ISBN не сошлась', 'MY_ISBN_CHECKSUM'
                            );
                        }
                    );
                }
            )),

К таблицам модуля можно обращаться через getList:

$mList = ModuleTable::getList(array(
     'select' =>array('ID', 'NAME'),
     'order' => array('NAME' =>'ASC'),
     'filter'=>array('=CHARSET'=>'Windows-1251'),
));
while($cult = $mList->fetch()) var_dump($cult);

Для выборки одной записи по первичному ключу может применяться метод getById():

$cultureDb = CultureTable::getById($cultureId);

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

new Entity\ExpressionField('AGE_DAYS', 'DATEDIFF(NOW(), %s)', array('PUBLISH_DATE') )

Также можно устанавливать отношения между сущностными

Обновление модуля

править

Обновление происходит путем выполнения файла updater.php

См. также

править
  1. https://tokmakov.msk.ru/blog/item/208