Расширение функционала Bitrix 24/Модуль: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Строка 65: Строка 65:
TextField
TextField
FloatField
FloatField
ArrayField
</pre>
</pre>

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


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

Версия от 10:11, 26 февраля 2020

Базовая структура модуля для Битрикс описана тут, 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 библиотек.

Модель БД

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

Типы данных:

EnumField
DateField
DatetimeField
BooleanField
TextField
FloatField
ArrayField

Описание поля с валидацией:

new Entity\StringField('ISBN', array(
                'required' => true,
                'column_name' => 'ISBNCODE',
                '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