PHPackages                             fi1a/usersettings - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. fi1a/usersettings

ActiveBitrix-d7-module

fi1a/usersettings
=================

Модуль 1С-Битрикс "Пользовательские настройки". Предоставляет страницу с пользовательскими настройками сайта.

2.1.2(3y ago)1371MITPHPPHP ^7.3 || ^8

Since Dec 6Pushed 3y ago1 watchersCompare

[ Source](https://github.com/fi1a/usersettings)[ Packagist](https://packagist.org/packages/fi1a/usersettings)[ Docs](https://github.com/fi1a/usersettings)[ RSS](/packages/fi1a-usersettings/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (6)Versions (14)Used By (0)

Модуль 1С-Битрикс "Пользовательские настройки"
==============================================

[](#модуль-1с-битрикс-пользовательские-настройки)

[![Latest Version](https://camo.githubusercontent.com/093c8213278f95ee53ccdd671f6e4bbccb1eef8e2ecfdfb847c80582cf35e586/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f666931612f7573657273657474696e67733f6c6162656c3d72656c65617365)](https://packagist.org/packages/fi1a/usersettings)[![Software License](https://camo.githubusercontent.com/87e15b68660a6f9817d3835e39fa810df0f3ecd82878ad717dda76cf9819be61/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f666931612f7573657273657474696e67733f7374796c653d666c61742d737175617265)](https://github.com/fi1a/usersettings/blob/master/LICENSE)[![PHP Version](https://camo.githubusercontent.com/33a3a000fb3e3f88d58c80967048fd4071dc7d54512a6f7a63d7454b8967e0f6/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f666931612f7573657273657474696e67733f7374796c653d666c61742d737175617265)](https://php.net)[![Total Downloads](https://camo.githubusercontent.com/b47231808fadb1dbf36ca31833d3f563dcef75ebf0741db9723747e64c07a9a8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f666931612f7573657273657474696e67732e7376673f7374796c653d666c61742d73717561726526636f6c6f72423d6d656469756d76696f6c6574726564)](https://packagist.org/packages/fi1a/usersettings)[![Support mail](https://camo.githubusercontent.com/116fa0d447870a3a6c6c1f4b296c889707a6e30a69c2b28cbe8d0f6f5c3d4920/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61696c2d737570706f7274253430666931612e72752d627269676874677265656e)](mailto:support@fi1a.ru)

Позволяет создать административную страницу с пользовательскими настройками. Предоставляет удобное API для создания вкладок и полей, что дает возможность использовать этот модуль совместно с модулями миграций. События дают возможность вносить изменения в устанавливаемое значение настройки или выполнить какие-либо действия при добавлении/удалении/обновлении вкладок или полей.

Описание модуля
---------------

[](#описание-модуля)

Данный модуль решает задачи добавления настроек для вашего проекта. Например: включение/отключение, даты для реализации активности какого-либо функционала, тексты. Типы полей в настройках ограничены типами пользовательских полей, т.е. вы легко можете добавить свой тип поля для настроек.

Преимущества модуля
-------------------

[](#преимущества-модуля)

1. Расположение ссылки в меню со страницей пользовательских настроек можно расположить в любом основном разделе. Также возможна настройка названия страницы и название ссылки пользовательских настроек;
2. В настройках модуля можно добавить вкладки и в них поля;
3. Для вкладок и полей предусмотрена сортировка, что позволяет настроить расположение их на странице пользовательских настроек;
4. В качестве полей модуля выступают пользовательские поля, что позволяет добавить в настройки любой из доступных типов пользовательских полей (строка, дата и т.д.);
5. Поддерживаются множественные значения для настроек;
6. Предусмотрены гибкие настройки прав доступа для просмотра/редактирования пользовательских настроек и просмотра/редактирования полей, вкладок;
7. Для вкладок есть возможность указать название и заголовок, для полей - название и подсказку;
8. Используя API легко можно добавить вкладку или поле, это позволяет писать миграции;
9. Система событий дает возможность вносить изменения при установке значения настройки или выполнить какие-либо действия при добавлении/удалении/обновлении вкладок или полей.

Список поддерживаемых типов полей
---------------------------------

[](#список-поддерживаемых-типов-полей)

Из коробки вам будут доступны следующие типы полей:

- Адрес;
- Бронирование ресурсов;
- Видео;
- Да/Нет;
- Дата;
- Дата со временем;
- Деньги;
- Опрос;
- Письмо (email);
- Привязка к разделам инф. блоков;
- Привязка к элементам highload-блоков;
- Привязка к элементам инф. блоков;
- Содержимое ссылки;
- Список;
- Ссылка;
- Строка;
- Файл;
- Целое число;
- Число;
- Шаблон.

*список актуален на момент релиза модуля для «1С-Битрикс: Управление сайтом» редакции "Бизнес"*

Изображения модуля
------------------

[](#изображения-модуля)

Добавление новой вкладки:

[![Добавление новой вкладки](images/fi1a.usersettings-screen-1.png)](images/fi1a.usersettings-screen-1.png)

Добавление поля для пользовательских настроек:

[![Добавление поля для пользовательских настроек](images/fi1a.usersettings-screen-2.png)](images/fi1a.usersettings-screen-2.png)

Редактирование пользовательских настроек

[![Редактирование пользовательских настроек](images/fi1a.usersettings-screen-3.png)](images/fi1a.usersettings-screen-3.png)

Внешний вид пользовательских настроек

[![Внешний вид пользовательских настроек](images/fi1a.usersettings-screen-4.png)](images/fi1a.usersettings-screen-4.png)

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

[](#установка-модуля-из-маркетплейса-1с-битрикс)

Модуль можно установить из Маркетплейса 1С-Битрикс ["Пользовательские настройки"](http://marketplace.1c-bitrix.ru/solutions/fi1a.usersettings/)

Перед установкой модуля следует установить модуль ["Обертка над composer для установки зависимостей"](http://marketplace.1c-bitrix.ru/solutions/fi1a.bitrixrequire/)если он еще не установлен. Модуль необходим для установки зависимостей через 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 &gt; Установленные решения &gt; модуль "Пользовательские настройки (fi1a.usersettings)").

**После установки проверьте права на чтение файлов и папок модуля.**

Поддержка миграций
------------------

[](#поддержка-миграций)

Начиная с версии 1.2.0 появилась поддержка миграций модуля ["Миграции для разработчиков" (sprint.migration)](https://marketplace.1c-bitrix.ru/solutions/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).

[![Билдер модуля миграций](images/fi1a.usersettings-screen-5.png)](images/fi1a.usersettings-screen-5.png)

Работа со значениями полей
--------------------------

[](#работа-со-значениями-полей)

Класс `\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)`.

АргументОписаниеstring $keyСимвольный код поля$defaultЗначение, которое вернется при отсутсвии значения в БД```
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()`.

АргументОписаниеstring $keyСимвольный код поля$valueНовое значение поля```
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('', $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('', $addResult->getErrorMessages());
}
```

Описание полей:

- `ACTIVE` — активность вкладки. Определяет будет ли выведена вкладка на странице пользовательских настроек;
- `CODE` — символьный код вкладки;
- `SORT` — сортировка вкладки. Определяет в какой последовательности будут выведены вкладки на странице пользовательских настроек;
- `LOCALIZATION` — массив с языковыми сообщениями. Ключем является символьный код языка.
    - `L_NAME` — название вкладки;
    - `L_TITLE` — заголовок вкладки.

### Выборка вкладок

[](#выборка-вкладок)

Основным метод для выборки вкладок является метод `getList(array $parameters = []): TabCollectionInterface`класса `\Fi1a\UserSettings\TabMapper`. Данный метод принимает в качестве аргумента массив аналогичный синтаксису ORM D7. Метод возвращает коллекцию классов вкладок `\Fi1a\UserSettings\TabCollection`. При пустом результате выборки класс коллекции вернется с нулевым количеством элементов.

АргументОписаниеarray $parametersПараметры getList```
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.

АргументОписаниеarray $parametersПараметры getList```
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`.

АргументОписаниеint $idИдентификатор вкладки```
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('', $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('', $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('', $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('', $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('', $addResult->getErrorMessages());
}
```

Описание полей:

- `ACTIVE` — активность поля. Определяет будет ли выведено поле на странице пользовательских настроек;
- `TAB_ID` — идентификатор вкладки, которой принадлежит поле;
- `UF` — массив с настройками пользовательского поля.

### Выборка полей

[](#выборка-полей)

Основным методом для выборки полей является `getList(array $parameters = []): FieldCollectionInterface`класса `\Fi1a\UserSettings\FieldMapper`. Данный метод принимает в качестве аргумента массив аналогичный синтаксису ORM D7. Метод возвращает коллекцию классов полей `\Fi1a\UserSettings\FieldCollection`. При пустом результате выборки класс коллекции вернется с нулевым количеством элементов.

АргументОписаниеarray $parametersПараметры getList```
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.

АргументОписаниеarray $parametersПараметры getList```
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`.

АргументОписаниеint $idИдентификатор поля```
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`.

АргументОписание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, если поле с символьным кодом не найдено.

АргументОписаниеstring $codeСимвольный код поля```
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('', $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('', $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('', $addResult->getErrorMessages());
    }
}
```

### Удаление поля

[](#удаление-поля)

Для удаления поля следует использовать метод `delete(): DeleteResult`класса `\Fi1a\UserSettings\Field`, который вернет результат в виде объкта класса `\Bitrix\Main\ORM\Data\DeleteResult`&gt;. Успешность выполнения операции можно проверить методом `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('', $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`.

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~69 days

Recently: every ~6 days

Total

13

Last Release

1159d ago

Major Versions

1.3.1 → 2.0.02022-12-04

PHP version history (2 changes)1.1.0PHP ^7.3 || ^8.0

1.2.0PHP ^7.3 || ^8

### Community

Maintainers

![](https://www.gravatar.com/avatar/d4f26c1adaa632741fadf55b1328cbd22ac91282aecfae2027d105df0ddedee4?d=identicon)[fi1a](/maintainers/fi1a)

---

Top Contributors

[![fi1a](https://avatars.githubusercontent.com/u/18556038?v=4)](https://github.com/fi1a "fi1a (7 commits)")

---

Tags

bitrixbitrix-modulephp

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/fi1a-usersettings/health.svg)

```
[![Health](https://phpackages.com/badges/fi1a-usersettings/health.svg)](https://phpackages.com/packages/fi1a-usersettings)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
