fi1a / usersettings
Модуль 1С-Битрикс "Пользовательские настройки". Предоставляет страницу с пользовательскими настройками сайта.
Installs: 16
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:bitrix-d7-module
Requires
- php: ^7.3 || ^8
- fi1a/collection: ^2.0
- fi1a/installers: ^2.0
Requires (Dev)
- captainhook/captainhook: ^5.4
- phpunit/phpunit: ^9.3
- slevomat/coding-standard: ^6.3
- squizlabs/php_codesniffer: ^3.5
README
Позволяет создать административную страницу с пользовательскими настройками. Предоставляет удобное API для создания вкладок и полей, что дает возможность использовать этот модуль совместно с модулями миграций. События дают возможность вносить изменения в устанавливаемое значение настройки или выполнить какие-либо действия при добавлении/удалении/обновлении вкладок или полей.
Описание модуля
Данный модуль решает задачи добавления настроек для вашего проекта. Например: включение/отключение, даты для реализации активности какого-либо функционала, тексты. Типы полей в настройках ограничены типами пользовательских полей, т.е. вы легко можете добавить свой тип поля для настроек.
Преимущества модуля
- Расположение ссылки в меню со страницей пользовательских настроек можно расположить в любом основном разделе. Также возможна настройка названия страницы и название ссылки пользовательских настроек;
- В настройках модуля можно добавить вкладки и в них поля;
- Для вкладок и полей предусмотрена сортировка, что позволяет настроить расположение их на странице пользовательских настроек;
- В качестве полей модуля выступают пользовательские поля, что позволяет добавить в настройки любой из доступных типов пользовательских полей (строка, дата и т.д.);
- Поддерживаются множественные значения для настроек;
- Предусмотрены гибкие настройки прав доступа для просмотра/редактирования пользовательских настроек и просмотра/редактирования полей, вкладок;
- Для вкладок есть возможность указать название и заголовок, для полей - название и подсказку;
- Используя API легко можно добавить вкладку или поле, это позволяет писать миграции;
- Система событий дает возможность вносить изменения при установке значения настройки или выполнить какие-либо действия при добавлении/удалении/обновлении вкладок или полей.
Список поддерживаемых типов полей
Из коробки вам будут доступны следующие типы полей:
- Адрес;
- Бронирование ресурсов;
- Видео;
- Да/Нет;
- Дата;
- Дата со временем;
- Деньги;
- Опрос;
- Письмо (email);
- Привязка к разделам инф. блоков;
- Привязка к элементам highload-блоков;
- Привязка к элементам инф. блоков;
- Содержимое ссылки;
- Список;
- Ссылка;
- Строка;
- Файл;
- Целое число;
- Число;
- Шаблон.
список актуален на момент релиза модуля для «1С-Битрикс: Управление сайтом» редакции "Бизнес"
Изображения модуля
Добавление новой вкладки:
Добавление поля для пользовательских настроек:
Редактирование пользовательских настроек
Внешний вид пользовательских настроек
Установка модуля из Маркетплейса 1С-Битрикс
Модуль можно установить из Маркетплейса 1С-Битрикс "Пользовательские настройки"
Перед установкой модуля следует установить модуль "Обертка над composer для установки зависимостей" если он еще не установлен. Модуль необходим для установки зависимостей через composer.
После чего модуль устанавливается и удаляется как любой модуль из маркетплейса.
Установка модуля через composer
В вашем composer.json проекта необходимо указать:
- в блоке require указать инсталятор
"fi1a/installers": "^2.0
; - в блоке require указать модуль
"fi1a/usersettings": "^2.0"
; - указать путь до 1С-Битрикс (
bitrix-dir
) для копирования модулей при установкеfi1a/installers
.
Пример файла composer.json проекта:
{ "name": "fi1a/project", "type": "project", "license": "MIT", "authors": [ { "name": "Fi1a", "email": "fi1a@icloud.com" } ], "require": { "fi1a/installers": "^2.0", "fi1a/usersettings": "^2.0" }, "extra": { "bitrix-dir": "../bitrix" } }
Затем выполняем установку пакетов командой composer install
.
Если у вас не подключен composer autoload.php, его необходимо подключить в файле local/php_interface/init.php
require_once __DIR__ . '/../vendor/autoload.php';
Если модуль не установили через composer, его необходимо установить из админки 1С-Битрикс (Marketplace > Установленные решения > модуль "Пользовательские настройки (fi1a.usersettings)").
После установки проверьте права на чтение файлов и папок модуля.
Поддержка миграций
Начиная с версии 1.2.0 появилась поддержка миграций модуля "Миграции для разработчиков" (sprint.migration)
Добавлен хелпер \Fi1a\UserSettings\SprintMigration\Helpers\UserSettingsHelper
и билдер \Fi1a\UserSettings\SprintMigration\Builders\UserSettingsBuilder
Использование хелпера:
public function up() { $helper = $this->getHelperManager(); $helper->UserSettings()->saveTab("TAB", array ( 'ACTIVE' => '1', 'CODE' => 'TAB', 'SORT' => '500', 'LOCALIZATION' => [ 'ru' => [ 'L_NAME' => 'Вкладка', 'L_TITLE' => 'Вкладка', ], 'en' => [ 'L_NAME' => 'Tab', 'L_TITLE' => 'Tab', ], ], )); }
Создание миграции доступно в разделе "Инструменты" под пунктом "Пользовательские настройки" на странице управления миграциями модуля "Миграции для разработчиков" (sprint.migration).
Работа со значениями полей
Класс \Fi1a\UserSettings\Option
предназначен для работы со значениями полей.
Класс реализует паттерн Singleton и для получения экземпляра класса следует использовать
метод getInstance()
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\Option; Loader::includeModule('fi1a.usersettings'); $option = Option::getInstance();
Получить значение поля
Для получения значения поля по символьному коду необходимо
воспользоваться методом get(string $key, $default = null)
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\Option; Loader::includeModule('fi1a.usersettings'); // Вернется значение поля UF_CAPTCHA_SECRET, если значение не задано вернется false Option::getInstance()->get('UF_CAPTCHA_SECRET', false);
Метод getAll(): array
предназначен для получения значений
по всем пользовательским полям.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\Option; Loader::includeModule('fi1a.usersettings'); // Вернутся значения по всем пользовательским полям Option::getInstance()->getAll();
Установить значение поля
Для установки значения поля используется метод set(string $key, $value): \Bitrix\Main\Result
.
В этом методе реализована валидация значения поля. Метод возвращает экземпляр класса
\Bitrix\Main\Result
и проверить наличие ошибки при установке значения можно
методом isSuccess()
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\Option; Loader::includeModule('fi1a.usersettings'); $option = Option::getInstance(); $result = $option->set('UF_CAPTCHA_SECRET', 'foo'); if (!$result->isSuccess()) { // В случае ошибки echo implode('<br>', $result->getErrorMessages()); return; } // Вернется значение "foo" установленное методом "set" $option->get('UF_CAPTCHA_SECRET');
Сбросить кеш значений
При изменении структуры или установки значения кеш автоматически очищается.
Метод clearCache(): bool
пригодится для принудительной очистки кеша
при изменениях не через API модуля.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\Option; Loader::includeModule('fi1a.usersettings'); Option::getInstance()->clearCache();
Выборка, добавление, обновление, удаление вкладок
Работа с вкладками реализуется тремя классами:
\Fi1a\UserSettings\TabMapper
— маппер вкладок пользовательских настроек;\Fi1a\UserSettings\Tab
— класс вкладки в пользовательских настройках;\Fi1a\UserSettings\TabCollection
— коллекция экземпляров классов вкладок пользовательских настроек.
Подробнее на них остановимся ниже.
Добавление вкладки
Класс вкладки \Fi1a\UserSettings\Tab
является наследником класса
\ArrayObject
. Для начала нужно получить экземпляр класса вкладки используя
фабричный метод create(array $input = []): TabInterface
передав в него все необходимые
парамеры. Данный метод является статичным. После того как мы получили экземпляр
класса \Fi1a\UserSettings\Tab
вызовем метод add(): AddResult
,
который вернет результат в виде объкта класса \Bitrix\Main\ORM\Data\AddResult
.
Успешность выполнения операции можно проверить методом isSuccess($internalCall = false)
класса \Bitrix\Main\ORM\Data\AddResult
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\Tab; Loader::includeModule('fi1a.usersettings'); $tab = Tab::create([ 'ACTIVE' => 1, 'CODE' => 'FORM_OPTIONS', 'SORT' => 500, 'LOCALIZATION' => [ 'ru' => [ 'L_NAME' => 'Настройки формы', 'L_TITLE' => 'Важные настройки формы', ], ], ]); $addResult = $tab->add(); if (!$addResult->isSuccess()) { echo implode('<br>', $addResult->getErrorMessages()); }
Описание полей:
ACTIVE
— активность вкладки. Определяет будет ли выведена вкладка на странице пользовательских настроек;CODE
— символьный код вкладки;SORT
— сортировка вкладки. Определяет в какой последовательности будут выведены вкладки на странице пользовательских настроек;LOCALIZATION
— массив с языковыми сообщениями. Ключем является символьный код языка.L_NAME
— название вкладки;L_TITLE
— заголовок вкладки.
Выборка вкладок
Основным метод для выборки вкладок является метод
getList(array $parameters = []): TabCollectionInterface
класса \Fi1a\UserSettings\TabMapper
. Данный метод принимает в качестве аргумента
массив аналогичный синтаксису ORM D7. Метод возвращает коллекцию классов вкладок
\Fi1a\UserSettings\TabCollection
. При пустом результате выборки
класс коллекции вернется с нулевым количеством элементов.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\TabMapper; Loader::includeModule('fi1a.usersettings'); $tabCollection = TabMapper::getList([ 'filter' => [ 'ACTIVE' => 1, ], 'order' => [ 'SORT' => 'ASC', ], ]); foreach ($tabCollection as $tab) { // Do something } unset($tab);
Предыдущий пример можно заменить с использованием метода
getActive(array $parameters = []): TabCollectionInterface
. Данный метод
выполняет выборку всех активных вкладок с возможностью дополнительной фильтрации или сортировки путем
передачи аргумента $parameters
аналогичного ORM D7.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\TabMapper; Loader::includeModule('fi1a.usersettings'); $tabCollection = TabMapper::getActive([ 'order' => [ 'SORT' => 'ASC', ], ]); foreach ($tabCollection as $tab) { // Do something } unset($tab);
Метод getById(int $id)
осуществляет поиск вкладки по идентификатору. В отличие от
методов getList(array $parameters = []): TabCollectionInterface
и getActive(array $parameters = []): TabCollectionInterface
возвращает не коллекцию вкладок, а экземпляр класса вкладки \Fi1a\UserSettings\Tab
.
Если вкладку не удалось найти по идентификатору, метод вернет значение false
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\TabMapper; Loader::includeModule('fi1a.usersettings'); $tab = TabMapper::getById(1); if (false !== $tab) { echo $tab['ID']; }
Обновление вкладки
Для обновления вкладки следует использовать метод update(): UpdateResult
класса \Fi1a\UserSettings\Tab
,
который вернет результат в виде объкта класса \Bitrix\Main\ORM\Data\UpdateResult
.
Успешность выполнения операции можно проверить методом isSuccess($internalCall = false)
класса \Bitrix\Main\ORM\Data\UpdateResult
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\TabMapper; Loader::includeModule('fi1a.usersettings'); $tab = TabMapper::getById(3); if (false !== $tab) { $tab['ACTIVE'] = 0; $updateResult = $tab->update(); if (!$updateResult->isSuccess()) { echo implode('<br>', $updateResult->getErrorMessages()); } }
Сохранение вкладки
Метод save()
осуществляет добавление или обновление вкладки в зависимости от
наличия значения ID
(первичного ключа).
Обновление с использованием метода save()
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\TabMapper; Loader::includeModule('fi1a.usersettings'); $tab = TabMapper::getById(3); if (false !== $tab) { // Вызов метода обновит вкладку $tab['ACTIVE'] = 1; $updateResult = $tab->save(); if (!$updateResult->isSuccess()) { echo implode('<br>', $updateResult->getErrorMessages()); } }
Добавление с использованием метода save()
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\TabMapper; Loader::includeModule('fi1a.usersettings'); $tab = TabMapper::getById(3); if (false !== $tab) { // Вызов метода добавит вкладку unset($tab['ID']); $tab['CODE'] = 'NEW_TAB_CODE'; $addResult = $tab->save(); if (!$addResult->isSuccess()) { echo implode('<br>', $addResult->getErrorMessages()); } }
Удаление вкладки
Для удаления вкладки следует использовать метод delete(): DeleteResult
класса \Fi1a\UserSettings\Tab
,
который вернет результат в виде объкта класса \Bitrix\Main\ORM\Data\DeleteResult
.
Успешность выполнения операции можно проверить методом isSuccess($internalCall = false)
класса \Bitrix\Main\ORM\Data\DeleteResult
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\TabMapper; Loader::includeModule('fi1a.usersettings'); $tab = TabMapper::getById(3); $deleteResult = $tab->delete(); if (!$deleteResult->isSuccess()) { echo implode('<br>', $deleteResult->getErrorMessages()); }
Выборка, добавление, обновление, удаление полей
Работа с полями реализуется тремя классами:
\Fi1a\UserSettings\FieldMapper
— маппер полей пользовательских настроек;\Fi1a\UserSettings\Field
— класс поля пользовательских настройках;\Fi1a\UserSettings\FieldCollection
— коллекция экземпляров классов полей пользовательских настроек.
Подробнее на них остановимся ниже.
Добавление поля
Класс поля \Fi1a\UserSettings\Field
является наследником класса
\ArrayObject
. Для начала нужно получить экземпляр класса поля, используя
фабричный метод create(array $input = []): FieldInterface
, передав в него все необходимые
парамеры. Данный метод является статичным. После того как мы получили экземпляр
класса \Fi1a\UserSettings\Field
вызовем метод add(): AddResult
,
который вернет результат в виде объкта класса \Bitrix\Main\ORM\Data\AddResult
.
Успешность выполнения операции можно проверить методом isSuccess($internalCall = false)
класса \Bitrix\Main\ORM\Data\AddResult
.
Ниже приведен пример добавления поля с типом строка.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\Field; Loader::includeModule('fi1a.usersettings'); $field = Field::create([ 'ACTIVE' => '1', 'TAB_ID' => '1', 'UF' => [ 'FIELD_NAME' => 'UF_RECAPTCHA_SECRET', 'USER_TYPE_ID' => 'string', 'XML_ID' => '', 'SORT' => '500', 'MULTIPLE' => 'N', 'MANDATORY' => 'N', 'SETTINGS' => [ 'SIZE' => 60, 'ROWS' => 1, 'REGEXP' => '', 'MIN_LENGTH' => 0, 'MAX_LENGTH' => 0, 'DEFAULT_VALUE' => '', ], 'EDIT_FORM_LABEL' => ['en' => '', 'ru' => 'Приватный ключ reСaptcha v3',], 'HELP_MESSAGE' => ['en' => '', 'ru' => 'Используется для reСaptcha v3',], ], ]); $addResult = $field->add(); if (!$addResult->isSuccess()) { echo implode('<br>', $addResult->getErrorMessages()); }
Описание полей:
ACTIVE
— активность поля. Определяет будет ли выведено поле на странице пользовательских настроек;TAB_ID
— идентификатор вкладки, которой принадлежит поле;UF
— массив с настройками пользовательского поля.
Выборка полей
Основным методом для выборки полей является
getList(array $parameters = []): FieldCollectionInterface
класса \Fi1a\UserSettings\FieldMapper
. Данный метод принимает в качестве аргумента
массив аналогичный синтаксису ORM D7. Метод возвращает коллекцию классов полей
\Fi1a\UserSettings\FieldCollection
. При пустом результате выборки
класс коллекции вернется с нулевым количеством элементов.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; Loader::includeModule('fi1a.usersettings'); $fieldCollection = FieldMapper::getList([ 'filter' => [ 'ACTIVE' => 1, ], 'order' => [ 'ID' => 'DESC', ], ]); foreach ($fieldCollection as $field) { // Do something } unset($field);
Предыдущий пример можно заменить с использованием метода
getActive(array $parameters = []): FieldCollectionInterface
. Данный метод
выполняет выборку всех активных полей с возможностью дополнительной фильтрации или сортировки путем
передачи аргумента $parameters
аналогичного ORM D7.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; Loader::includeModule('fi1a.usersettings'); $fieldCollection = FieldMapper::getActive([ 'order' => [ 'ID' => 'DESC', ], ]); foreach ($fieldCollection as $field) { // Do something } unset($field);
Метод getById(int $id)
осуществляет поиск поля по идентификатору (не по идентификатору пользовательского поля).
В отличие от методов getList(array $parameters = []): FieldCollectionInterface
и getActive(array $parameters = []): IFieldCollection
возвращает не коллекцию полей, а экземпляр класса поля \Fi1a\UserSettings\Field
.
Если поле не удалось найти по идентификатору, метод вернет значение false
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; Loader::includeModule('fi1a.usersettings'); $field = FieldMapper::getById(2); if (false !== $field) { echo $field['ID']; }
Для выбора всех полей вкладки можно использовать метод getByTabId(int $tabId)
.
Метод вернет коллекцию полей принадлежащих вкладки с идентификатором int $tabId
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; Loader::includeModule('fi1a.usersettings'); $fieldCollection = FieldMapper::getByTabId(1); foreach ($fieldCollection as $field) { // Do something } unset($field);
Для выбора поля по символьному коду можно использовать метод getByCode(string $code)
.
Метод вернет поле с символьным кодом string $code
или false, если поле с символьным кодом не найдено.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; Loader::includeModule('fi1a.usersettings'); $field = FieldMapper::getByCode('UF_FUS_FIELD'); if (false !== $field) { echo $field['ID']; }
Обновление поля
Для обновления поля следует использовать метод update(): UpdateResult
класса \Fi1a\UserSettings\Field
,
который вернет результат в виде объекта класса \Bitrix\Main\ORM\Data\UpdateResult
.
Успешность выполнения операции можно проверить методом isSuccess($internalCall = false)
класса \Bitrix\Main\ORM\Data\UpdateResult
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; Loader::includeModule('fi1a.usersettings'); $field = FieldMapper::getById(3); if (false !== $field) { $field['ACTIVE'] = 0; $updateResult = $field->update(); if (!$updateResult->isSuccess()) { echo implode('<br>', $updateResult->getErrorMessages()); } }
Сохранение поля
Метод save()
осуществляет добавление или обновление поля в зависимости от
наличия значения ID
(первичного ключа).
Обновление с использованием метода save()
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; Loader::includeModule('fi1a.usersettings'); $field = FieldMapper::getById(3); if (false !== $field) { // Вызов метода обновит поле $field['ACTIVE'] = 1; $updateResult = $field->save(); if (!$updateResult->isSuccess()) { echo implode('<br>', $updateResult->getErrorMessages()); } }
Добавление с использованием метода save()
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; Loader::includeModule('fi1a.usersettings'); $field = FieldMapper::getById(3); if (false !== $field) { // Вызов метода добавит поле unset($field['ID']); unset($field['UF_ID']); unset($field['UF']['ID']); $field['UF']['FIELD_NAME'] = 'UF_NEW_FIELD'; $addResult = $field->save(); if (!$addResult->isSuccess()) { echo implode('<br>', $addResult->getErrorMessages()); } }
Удаление поля
Для удаления поля следует использовать метод delete(): DeleteResult
класса \Fi1a\UserSettings\Field
,
который вернет результат в виде объкта класса \Bitrix\Main\ORM\Data\DeleteResult
>.
Успешность выполнения операции можно проверить методом isSuccess($internalCall = false)
класса \Bitrix\Main\ORM\Data\DeleteResult
.
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; Loader::includeModule('fi1a.usersettings'); $field = FieldMapper::getById(3); $deleteResult = $field->delete(); if (!$deleteResult->isSuccess()) { echo implode('<br>', $deleteResult->getErrorMessages()); }
Значения поля типа "список"
Получить значения поля типа "список" можно с помощью класса-хелпера Fi1a\UserSettings\Helpers\Enums
метода get
передав в качестве аргумента объект поля Fi1a\UserSettings\FieldInterface
типа "список".
use \Bitrix\Main\Loader; use \Fi1a\UserSettings\FieldMapper; use \Fi1a\UserSettings\Helpers\Enums; Loader::includeModule('fi1a.usersettings'); $field = FieldMapper::getById(3); $enums = Enums::get($field);
События модуля
В модуле предусмотрены события, которые позволяют модифицировать данные или расширить функционал модуля. Пример использования событий:
use \Bitrix\Main\Event; use \Bitrix\Main\Loader; use \Bitrix\Main\EventManager; use \Bitrix\Main\EventResult; use \Fi1a\UserSettings\Option; Loader::includeModule('fi1a.usersettings'); EventManager::getInstance()->addEventHandler( 'fi1a.usersettings', 'OnOptionGet', function (Event $event) { return new EventResult( EventResult::SUCCESS, [ 'default' => 'new default value', ] ); } ); // Если поле имеет значение null или false, вместо 'foo' вернется значение 'new default value' Option::getInstance()->get('UF_RECAPCHA_SECRET', 'foo');
События связанные со значениями полей
OnOptionGet
— вызывается ДО возврата значения поля методомget(string $key, $default = null)
класса\Fi1a\UserSettings\Option
;OnBeforeOptionSet
— вызывается ДО установки значения поля методомset(string $key, $value): Result
класса\Fi1a\UserSettings\Option
;OnAfterOptionSet
— вызывается ПОСЛЕ установки значения поля методомset(string $key, $value): Result
класса\Fi1a\UserSettings\Option
.
События связанные с вкладками
OnBeforeTabAdd
— вызывается ДО добавления новой вкладки методомadd(): AddResult
класса\Fi1a\UserSettings\Tab
;OnAfterTabAdd
— вызывается ПОСЛЕ добавления новой вкладки методомadd(): AddResult
класса\Fi1a\UserSettings\Tab
;OnBeforeTabUpdate
— вызывается ДО обновления вкладки методомupdate(): UpdateResult
класса\Fi1a\UserSettings\Tab
;OnAfterTabUpdate
— вызывается ПОСЛЕ обновления вкладки методомupdate(): UpdateResult
класса\Fi1a\UserSettings\Tab
;OnBeforeTabDelete
— вызывается ДО удаления вкладки методомdelete(): DeleteResult
класса\Fi1a\UserSettings\Tab
;OnAfterTabDelete
— вызывается ПОСЛЕ удаления вкладки методомdelete(): DeleteResult
класса\Fi1a\UserSettings\Tab
.
События связанные с полями
OnBeforeFieldAdd
— вызывается ДО добавления нового поля методомadd(): AddResult
класса\Fi1a\UserSettings\Field
;OnAfterFieldAdd
— вызывается ПОСЛЕ добавления нового поля методомadd(): AddResult
класса\Fi1a\UserSettings\Field
;OnBeforeFieldUpdate
— вызывается ДО обновления поля методомupdate(): UpdateResult
класса\Fi1a\UserSettings\Field
;OnAfterFieldUpdate
— вызывается ПОСЛЕ обновления поля методомupdate(): UpdateResult
класса\Fi1a\UserSettings\Field
;OnBeforeFieldDelete
— вызывается ДО удаления поля методомdelete(): DeleteResult
класса\Fi1a\UserSettings\Field
;OnAfterFieldDelete
— вызывается ПОСЛЕ удаления поля методомdelete(): DeleteResult
класса\Fi1a\UserSettings\Field
.