PHPackages                             ge1i0n/bitrix-options - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. ge1i0n/bitrix-options

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ge1i0n/bitrix-options
=====================

2.1.0(4w ago)1098121MITPHPPHP &gt;=8.2

Since Jul 27Pushed 4w ago2 watchersCompare

[ Source](https://github.com/Ge1i0N/bitrix-options)[ Packagist](https://packagist.org/packages/ge1i0n/bitrix-options)[ Docs](https://github.com/ge1i0n/bitrix-options)[ RSS](/packages/ge1i0n-bitrix-options/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (2)Versions (15)Used By (1)

[![Latest Stable Version](https://camo.githubusercontent.com/c0732fe76d39a3696776f1b0db46597265ce2288739c1259a2bb2123c744a703/68747470733a2f2f706f7365722e707567782e6f72672f67653169306e2f6269747269782d6f7074696f6e732f762f737461626c652e737667)](https://packagist.org/packages/ge1i0n/bitrix-options/)[![Total Downloads](https://camo.githubusercontent.com/0dbc24aaa920f15288d132d59765725aac342e069225a10b4cce7ac48766b5be/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f67653169306e2f6269747269782d6f7074696f6e732e7376673f7374796c653d666c6174)](https://packagist.org/packages/ge1i0n/bitrix-options)

Bitrix Options — генератор форм настроек в административной панели Битрикс
==========================================================================

[](#bitrix-options--генератор-форм-настроек-в-административной-панели-битрикс)

Пакет для удобной генерации страниц настроек модулей в административной панели 1С-Битрикс. Позволяет описывать форму настроек в декларативном стиле через fluent-интерфейс — без шаблонов и без ручного HTML.

---

Содержание
----------

[](#содержание)

- [Поддержка версий](#%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9)
- [Установка](#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
- [Быстрый старт](#%D0%B1%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9-%D1%81%D1%82%D0%B0%D1%80%D1%82)
- [Демо-пример](#%D0%B4%D0%B5%D0%BC%D0%BE-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-examplesdemophp)
- [Схема работы](#%D1%81%D1%85%D0%B5%D0%BC%D0%B0-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B)
- [Типы полей](#%D1%82%D0%B8%D0%BF%D1%8B-%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9)
- [Общие трейты (fluent-методы)](#%D0%BE%D0%B1%D1%89%D0%B8%D0%B5-%D1%82%D1%80%D0%B5%D0%B9%D1%82%D1%8B-fluent-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B)
- [Безопасность](#%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C)
- [Тестирование](#%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
- [Статический анализ](#%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9-%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7)
- [Структура пакета](#%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0-%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0)
- [Дополнительно](#%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE)

---

Поддержка версий
----------------

[](#поддержка-версий)

BitrixOptionsmpm.optionsPHP1.0+1.0+7.0+1.0+, 2.0+2.0+8.2+---

Установка
---------

[](#установка)

### Через marketplace

[](#через-marketplace)

1. Установить [модуль mpm.options](http://marketplace.1c-bitrix.ru/solutions/mpm.options/) из маркетплейса Битрикс.
2. Создать файл настроек модуля (например, `options.php`).
3. Подключить модуль и вызвать генератор формы:

```
Bitrix\Main\Loader::includeModule('mpm.options');

Form::make('youmodule.id', [
    Tab::make('first', 'Первая вкладка', []),
    Tab::make('second', 'Вторая вкладка', []),
]);
```

### Через Composer

[](#через-composer)

```
composer require ge1i0n/bitrix-options
```

```
use Gelion\BitrixOptions\Form;
use Gelion\BitrixOptions\Tab;
use Gelion\BitrixOptions\Fields\Text;
use Gelion\BitrixOptions\Fields\Number;

Form::make('youmodule.id', [
    Tab::make('first', 'Первая вкладка', [
        Text::make('TEXT'),
    ]),
    Tab::make('second', 'Вторая вкладка', [
        Number::make('NUMBER'),
    ]),
]);
```

### Подключение в свой модуль для маркетплейса (без Composer)

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

Если ваш модуль распространяется через marketplace и не использует Composer, скопируйте файлы пакета в свой модуль и зарегистрируйте автозагрузку в `include.php`:

```
Bitrix\Main\Loader::registerAutoLoadClasses('youmodule.id', [
    'Gelion\\BitrixOptions\\Tab'                     => '/lib/Tab.php',
    'Gelion\\BitrixOptions\\Form'                    => '/lib/Form.php',
    'Gelion\\BitrixOptions\\Enums\\Color'             => '/lib/Enums/Color.php',
    'Gelion\\BitrixOptions\\Enums\\Width'             => '/lib/Enums/Width.php',
    'Gelion\\BitrixOptions\\Enums\\Height'            => '/lib/Enums/Height.php',
    'Gelion\\BitrixOptions\\Enums\\Resize'            => '/lib/Enums/Resize.php',
    'Gelion\\BitrixOptions\\Enums\\Display'           => '/lib/Enums/Display.php',
    'Gelion\\BitrixOptions\\Enums\\TagColor'          => '/lib/Enums/TagColor.php',
    'Gelion\\BitrixOptions\\Enums\\AlertIcon'         => '/lib/Enums/AlertIcon.php',
    'Gelion\\BitrixOptions\\Enums\\AlertSize'         => '/lib/Enums/AlertSize.php',
    'Gelion\\BitrixOptions\\Enums\\TextStyle'         => '/lib/Enums/TextStyle.php',
    'Gelion\\BitrixOptions\\Enums\\AlertTextPosition' => '/lib/Enums/AlertTextPosition.php',
    'Gelion\\BitrixOptions\\Fields\\Date'             => '/lib/Fields/Date.php',
    'Gelion\\BitrixOptions\\Fields\\Text'             => '/lib/Fields/Text.php',
    'Gelion\\BitrixOptions\\Fields\\Alert'            => '/lib/Fields/Alert.php',
    'Gelion\\BitrixOptions\\Fields\\Email'            => '/lib/Fields/Email.php',
    'Gelion\\BitrixOptions\\Fields\\Number'           => '/lib/Fields/Number.php',
    'Gelion\\BitrixOptions\\Fields\\Select'           => '/lib/Fields/Select.php',
    'Gelion\\BitrixOptions\\Fields\\Heading'          => '/lib/Fields/Heading.php',
    'Gelion\\BitrixOptions\\Fields\\Checkbox'         => '/lib/Fields/Checkbox.php',
    'Gelion\\BitrixOptions\\Fields\\Textarea'         => '/lib/Fields/Textarea.php',
    'Gelion\\BitrixOptions\\Fields\\Condition'        => '/lib/Fields/Condition.php',
    'Gelion\\BitrixOptions\\Fields\\HtmlEditor'       => '/lib/Fields/HtmlEditor.php',
    'Gelion\\BitrixOptions\\Fields\\ColorPicker'      => '/lib/Fields/ColorPicker.php',
    'Gelion\\BitrixOptions\\Traits\\WithTag'          => '/lib/Traits/WithTag.php',
    'Gelion\\BitrixOptions\\Traits\\WithHint'         => '/lib/Traits/WithHint.php',
    'Gelion\\BitrixOptions\\Traits\\WithColor'        => '/lib/Traits/WithColor.php',
    'Gelion\\BitrixOptions\\Traits\\WithModuleId'     => '/lib/Traits/WithModuleId.php',
    'Gelion\\BitrixOptions\\Traits\\WithStyleClass'   => '/lib/Traits/WithStyleClass.php',
    'Gelion\\BitrixOptions\\Traits\\WithDisplayWithoutValue' => '/lib/Traits/WithDisplayWithoutValue.php',
]);
```

---

Быстрый старт
-------------

[](#быстрый-старт)

```
use Gelion\BitrixOptions\Form;
use Gelion\BitrixOptions\Tab;
use Gelion\BitrixOptions\Fields\Text;
use Gelion\BitrixOptions\Fields\Checkbox;
use Gelion\BitrixOptions\Fields\Select;

Form::make('my.module.id', [
    Tab::make('main', 'Основные', [
        Text::make('SITE_NAME', 'Название сайта')
            ->setDefault('Мой сайт')
            ->setHint('Отображается в заголовке'),
        Checkbox::make('ENABLE_CACHE', 'Включить кеширование'),
        Select::make('THEME', 'Тема оформления')
            ->options([
                'light' => 'Светлая',
                'dark'  => 'Тёмная',
            ]),
    ]),
]);
```

Поместите этот код в `options.php` вашего модуля. Файл должен быть доступен из административной панели через меню «Настройки» → «Настройки продукта» → «Настройки модулей».

---

Демо-пример (`examples/demo.php`)
---------------------------------

[](#демо-пример-examplesdemophp)

В пакете есть полноценный демонстрационный файл `examples/demo.php`, который показывает **все типы полей** пакета с различными комбинациями настроек. Это отличная отправная точка для изучения возможностей пакета.

### Что показывает демо

[](#что-показывает-демо)

Демо-страница содержит три вкладки:

ВкладкаЧто показывает**📋 Базовые поля**Text, Textarea (с resize, без resize, количество строк), Number (с min/max/step), Checkbox, Select (одиночный и множественный)**⚙️ Дополнительные поля**ColorPicker, Date, Email, Heading, Alert (все варианты icon/size/textPosition/color), HtmlEditor, Condition**🎨 Стилизация**Примеры всех fluent-модификаторов: hint, tag (разные TagColor), color обводки (Color), ширина (Width), высота (Height), стиль (TextStyle), display, autocomplete, disabled/readonly### Как запустить демо

[](#как-запустить-демо)

1. Скопируйте `examples/demo.php` в публичную директорию вашего проекта (например, `local/admin/` или `bitrix/admin/`).
2. Откройте страницу в браузере: `http://your-project.local/bitrix/admin/demo.php`.
3. Сохраняйте/изменяйте значения — они хранятся в `Bitrix\Main\Config\Option` для модуля `bitrix_options_demo`.
4. Нажмите «Сбросить демо-опции» чтобы очистить все сохранённые значения.

> **Важно:** Демо-файл предназначен **только для локальной разработки**. Не используйте его на боевых сайтах.

---

Схема работы
------------

[](#схема-работы)

На странице настроек вызывается статический метод `Form::make()`, в который передаются:

1. **ID модуля** — строка, идентификатор вашего модуля.
2. **Массив табов** — описание вкладок и полей внутри них.

```
Form::make('youmodule.id', [
    Tab::make('tab_id', 'Название вкладки', [
        // Поля...
    ]),
]);
```

Каждый Tab содержит массив полей. Порядок полей соответствует порядку в массиве (в отличие от v1.x, где использовалось поле сортировки).

---

Типы полей
----------

[](#типы-полей)

### Общая информация

[](#общая-информация)

Все типы полей создаются через статический метод `make()`, который принимает:

- **Ключ в БД** — название опции в `Bitrix\Main\Config\Option`.
- **Пояснение (опционально)** — строка, отображаемая рядом с полем. Если передан только один параметр, он используется как пояснение, а ключ не используется (для полей, которые ничего не хранят).

Fluent-методы возвращают `$this`, поэтому их можно вызывать цепочкой.

---

### `Heading` — Заголовок

[](#heading--заголовок)

Выводит заголовок-разделитель между группами полей. Заменяет группы полей из v1.x.

```
Heading::make('Я заголовок группы');

// С поддержкой HTML
Heading::make('Настройки импорта')->allowHtml();
```

По умолчанию HTML экранируется. `->allowHtml()` отключает экранирование — используйте с осторожностью.

---

### `Alert` — Предупреждение / Информационное сообщение

[](#alert--предупреждение--информационное-сообщение)

Выводит блок с сообщением, используя [ui.alerts из D7](https://dev.1c-bitrix.ru/api_d7/bitrix/ui/messages/alerts.php). Настраивается через fluent-методы:

```
Alert::make('Я предупреждение')
    ->setIcon(AlertIcon::INFO)
    ->setSize(AlertSize::XS)
    ->setTextPosition(AlertTextPosition::CENTER);

// С поддержкой HTML (ссылки, форматирование)
Alert::make('Подробнее в документации')
    ->setIcon(AlertIcon::INFO)
    ->allowHtml();
```

**Enums для Alert:**

EnumЗначения`AlertIcon``INFO`, `WARNING`, `DANGER``AlertSize``XS`, `SM`, `MD`, `LG``AlertTextPosition``CENTER`, `INLINE`, `BLOCK``Color``ACTIVE`, `SUCCESS`, `WARNING`, `DANGER`, `DISABLED`---

### `Text` — Текстовое поле

[](#text--текстовое-поле)

Базовое поле, от которого наследуются все остальные (Date, Email, Number, Checkbox и др.).

```
Text::make('TEXT_OPTION', 'Я текстовое поле')
    ->disabled(true)
    ->readonly(true)
    ->setDefault('default')
    ->setAutocomplete('username')
    ->setHint('Я строка подсказки')
    ->setPlaceholder('Я строка плейсхолдер')
    ->setStyle(TextStyle::ROUND)
    ->setDisplay(Display::BLOCK)
    ->setTag('Я строка тега', TagColor::SUCCESS)
    ->setHeight(Height::MD)
    ->setWidth(Width::W75)
    ->setColor(Color::SUCCESS);
```

---

### `Date` — Поле для даты

[](#date--поле-для-даты)

Текстовое поле с типом `date`.

```
Date::make('DATE_OPTION', 'Я поле даты');
```

---

### `Email` — Поле для email

[](#email--поле-для-email)

Текстовое поле с типом `email`.

```
Email::make('EMAIL_OPTION', 'Я поле электронной почты');
```

---

### `Number` — Числовое поле

[](#number--числовое-поле)

Текстовое поле с типом `number`. Дополнительные методы: `min()`, `max()`, `step()`.

```
Number::make('NUMBER_OPTION', 'Я поле ввода чисел')
    ->min(0)
    ->max(100)
    ->step(2);
```

---

### `Checkbox` — Переключатель

[](#checkbox--переключатель)

Хранит значение в формате `Y` / `N`, отображается как чекбокс.

```
Checkbox::make('CHECKBOX_OPTION', 'Я поле ввода чекбокса');
```

---

### `ColorPicker` — Выбор цвета

[](#colorpicker--выбор-цвета)

Поле выбора цвета. Дополнительные методы: `cols()`, `rows()`.

```
ColorPicker::make('COLOR_OPTION', 'Выберите цвет');
```

> **Важно:** При сохранении страницы, если цвет не выбран, по умолчанию сохраняется чёрный.

---

### `Textarea` — Многострочное поле

[](#textarea--многострочное-поле)

Поле для многострочного ввода.

```
Textarea::make('TEXTAREA_OPTION', 'Я поле многострочного ввода')
    ->setResize(Resize::RESIZE_X)
    ->cols(10)
    ->rows(10);
```

**Enums для Resize:** `NO_RESIZE`, `RESIZE_X`, `RESIZE_Y`, `RESIZE_BOTH`.

---

### `Select` — Выбор из списка

[](#select--выбор-из-списка)

Селектор с поддержкой одиночного/множественного выбора.

```
Select::make('SELECT_OPTION', 'Я поле выбора из списка')
    ->options([
        'key-1' => 'Вариант 1',
        'key-2' => 'Вариант 2',
    ])
    ->size(5)        // Атрибут size
    ->multiple();    // Включить множественный выбор
```

При `multiple()` имя поля в форме становится `KEY[]`, а значение в БД хранится в сериализованном виде.

---

### `HtmlEditor` — HTML-редактор

[](#htmleditor--html-редактор)

Редактор с переключением между режимами text, html и визуальный редактор.

```
HtmlEditor::make('HTML_EDITOR_OPTION', 'Я поле редактора')
    ->setHint('Я строка подсказки');
```

---

### `Condition` — Конструктор условий

[](#condition--конструктор-условий)

Поле выбора условий, основанное на классе `CCatalogCondTree`. Используется для построения сложных логических условий (например, правил работы с корзиной). Значение хранится в БД в формате `base64(serialize(...))`.

```
Condition::make('CONDITION_OPTION', 'Я поле условия');
```

---

Общие трейты (fluent-методы)
----------------------------

[](#общие-трейты-fluent-методы)

Пакет использует трейты для переиспользования fluent-методов между полями. Понимание трейтов помогает понять, какие методы доступны у каждого поля.

ТрейтМетодыОписаниеПрименяется в`WithModuleId``setModuleId()`Устанавливает ID модуля (вызывается автоматически из `Tab::view()`)Все поля`WithHint``setHint()`Добавляет всплывающую подсказку с иконкойText, Textarea, Number, Checkbox, HtmlEditor и др.`WithTag``setTag(string, TagColor)`Добавляет цветной тег рядом с полемText, Number, Email, Date, Checkbox, ColorPicker`WithColor``setColor(Color)`Устанавливает цвет обводки поляText, Number, Email, Date, Checkbox, ColorPicker, Alert`WithStyleClass``getClassFromProps()`Собирает CSS-классы из свойств (display, width, height, color, style)Text, Alert`WithDisplayWithoutValue`—Для полей, которые отображают информацию, но не хранят значенияAlert, Heading### Enum-классы

[](#enum-классы)

EnumЗначенияДля чего`Color``ACTIVE`, `SUCCESS`, `WARNING`, `DANGER`, `DISABLED`, `HOVER`Цвет обводки`Width``DEFAULT`, `AUTO`, `W25`, `W33`, `W50`, `W75`, `FULL`Ширина поля`Height``XS`, `SM`, `MD`, `LG`Высота поля`TextStyle``ROUND`, `UNDERLINE`, `NO_BORDER`Стиль текстового поля`Display``INLINE`, `BLOCK`Режим отображения`TagColor``PRIMARY`, `SUCCESS`, `DANGER`, `WARNING`, `INFO`Цвет тега`Resize``NO_RESIZE`, `RESIZE_X`, `RESIZE_Y`, `RESIZE_BOTH`Направление ресайза Textarea---

Безопасность
------------

[](#безопасность)

### Экранирование данных

[](#экранирование-данных)

Все данные, выводимые в HTML-атрибуты, экранируются через `htmlspecialchars()`. Это защищает от XSS-атак при вводе специальных символов в названия, значения и другие текстовые поля.

```
// Значение alert(1) будет экранировано
Text::make('KEY', 'Название');
```

### `allowHtml()` — осознанный риск

[](#allowhtml--осознанный-риск)

Метод `allowHtml()` доступен для полей `Alert` и `Heading`. Он отключает экранирование, позволяя выводить HTML-разметку.

**Используйте `allowHtml()` только когда:**

- Вы доверяете источнику данных (статическая строка в коде, а не пользовательский ввод).
- Вам действительно нужен HTML внутри поля (ссылки, жирный текст, списки).

Если вы передаёте пользовательские данные в поле с `allowHtml()`, убедитесь, что они экранированы самостоятельно.

### Сериализация

[](#сериализация)

Поля `Select` (множественный), `HtmlEditor` и `Condition` хранят данные в сериализованном виде. Пакет корректно обрабатывает краевые случаи: `false`, пустую строку, некорректный base64.

---

Тестирование
------------

[](#тестирование)

Пакет имеет 177 PHPUnit-тестов, которые покрывают:

- **Form** — рендеринг формы, экранирование moduleId, кнопки, заголовки.
- **Tab** — создание вкладок, рендеринг контента.
- **Fields** — все 12 типов полей: создание, fluent-интерфейс, HTML на выходе, заполнение значений.
- **Security** — XSS во всех полях, обработка unserialize краевых случаев.
- **Traits** — 6 трейтов: корректная установка свойств.

### Запуск тестов

[](#запуск-тестов)

```
# Все тесты
./vendor/bin/phpunit

# С детальным выводом имён тестов
./vendor/bin/phpunit --testdox

# Только тесты безопасности
./vendor/bin/phpunit tests/Security/

# Только тесты полей
./vendor/bin/phpunit tests/Fields/

# Только тесты одного поля (например, Text)
./vendor/bin/phpunit tests/Fields/TextTest.php

# Только тесты одного метода (например, тест XSS в значениях)
./vendor/bin/phpunit --filter test_text_escapes_xss_in_value tests/

# С покрытием кода (требуется Xdebug или PCOV)
./vendor/bin/phpunit --coverage-html coverage/
```

### Структура тестов

[](#структура-тестов)

```
tests/
├── bootstrap.php           # Автозагрузка + подключение моков
├── FormTest.php            # Тесты Form (рендеринг, экранирование, кнопки)
├── TabTest.php             # Тесты Tab (создание, рендеринг, пустые поля)
├── Enums/                  # Тесты всех Enum-классов (10 файлов)
│   ├── AlertIconTest.php
│   ├── ColorTest.php
│   └── ...
├── Fields/                 # Тесты всех типов полей (12 файлов)
│   ├── TextTest.php
│   ├── SelectTest.php
│   ├── AlertTest.php
│   └── ...
├── Security/               # Тесты безопасности
│   ├── XssTest.php         #   XSS во всех типах полей
│   └── UnserializeTest.php #   Unserialize краевые случаи
├── Traits/                 # Тесты трейтов (6 файлов)
│   ├── WithHintTest.php
│   ├── WithTagTest.php
│   └── ...
└── Mocks/                  # Заглушки для Bitrix CMS (без БД!)
    ├── BitrixMocks.php     #   check_bitrix_sessid(), bitrix_sessid_post()
    ├── OptionMock.php      #   Bitrix\Main\Config\Option
    ├── ApplicationMock.php #   Bitrix\Main\Application
    ├── CAdminTabControl.php #   CAdminTabControl
    ├── CFileMan.php        #   CFileMan
    ├── FormDependencies.php
    ├── CCatalogCondTree.php #   CCatalogCondTree
    └── PhpstanStubs.php    #   Стабы для PHPStan

```

### Как работают тесты (без реального Bitrix)

[](#как-работают-тесты-без-реального-bitrix)

Тесты не требуют установленного 1С-Битрикс. Вместо него используются моки в `tests/Mocks/`:

- **`BitrixMocks.php`** — глобальные функции `check_bitrix_sessid()` и `bitrix_sessid_post()`.
- **`OptionMock.php`** — `Bitrix\Main\Config\Option`, который хранит данные в статическом массиве (не в БД).
- **`ApplicationMock.php`** — `Bitrix\Main\Application` и `Bitrix\Main\HttpRequest`.
- **`CAdminTabControl.php`** — заглушка класса `CAdminTabControl` для рендеринга вкладок.

Это позволяет запускать тесты в любой среде, где есть PHP и Composer.

### Как написать свой тест

[](#как-написать-свой-тест)

```
namespace Gelion\BitrixOptions\Tests\Fields;

use Gelion\BitrixOptions\Fields\Text;
use PHPUnit\Framework\TestCase;

final class MyFieldTest extends TestCase
{
    protected function tearDown(): void
    {
        // Сброс моков после каждого теста
        \Bitrix\Main\Application::reset();
        \Bitrix\Main\Config\Option::reset();
    }

    public function test_field_renders(): void
    {
        $field = Text::make('MY_KEY', 'My Title');
        $html = $field->view();

        $this->assertStringContainsString('MY_KEY', $html);
        $this->assertStringContainsString('My Title', $html);
    }
}
```

### Тестирование с mock-данными

[](#тестирование-с-mock-данными)

Моки `Option` позволяют проверить чтение/запись значений без базы данных:

```
// Запись тестового значения
\Bitrix\Main\Config\Option::set('test.module', 'my_key', 'stored_value');

// Чтение значения полем
$field = Text::make('my_key');
$field->setModuleId('test.module');
$field->fillValue();

$this->assertSame('stored_value', $field->value);
```

---

Статический анализ
------------------

[](#статический-анализ)

Пакет проверяется PHPStan на уровне `--level=9`:

```
./vendor/bin/phpstan analyse src --level=9
```

---

Структура пакета
----------------

[](#структура-пакета)

```
bitrix-options/
├── src/                      # Gelion\BitrixOptions — основной API
│   ├── Form.php              # Генератор формы (точка входа)
│   ├── Tab.php               # Вкладка формы
│   ├── Fields/               # Типы полей (12 шт.)
│   ├── Enums/                # Enum-классы для типизированных параметров
│   └── Traits/               # Fluent-трейты
├── migration/                # Gelion\BitrixOptionsMigration — инструменты миграции
│   ├── src/
│   │   ├── Migrator.php      #   Конвертер v1 → v2
│   │   └── MigrationResult.php #   Результат миграции
│   ├── examples/             # Примеры конфигураций для миграции
│   │   ├── simple.php
│   │   ├── complex.php
│   │   └── all-field-types.php
│   └── docs/
│       └── MIGRATION.md      # Документация по миграции
├── tests/                    # PHPUnit-тесты (177)
│   ├── bootstrap.php
│   ├── FormTest.php
│   ├── TabTest.php
│   ├── Fields/
│   ├── Enums/
│   ├── Security/
│   ├── Traits/
│   └── Mocks/
├── examples/
│   └── demo.php              # Полный демо-пример всех полей
├── composer.json
├── phpunit.xml
├── phpstan.neon

```

---

Миграция с v1 на v2
-------------------

[](#миграция-с-v1-на-v2)

Если вы используете старую версию пакета с конфигурацией в виде массивов, утилита миграции автоматически преобразует v1-конфиг в современный fluent-код v2.

```
use Gelion\BitrixOptionsMigration\Migrator;

$migrator = new Migrator();
$result = $migrator->convert($v1Config);

if ($result->success) {
    echo $result->code;  // Сгенерированный v2-код
}
```

Подробнее: [migration/docs/MIGRATION.md](migration/docs/MIGRATION.md)Примеры конфигураций: [migration/examples/](migration/examples/)

---

Дополнительно
-------------

[](#дополнительно)

- [Документация по UI Bitrix D7](https://dev.1c-bitrix.ru/api_d7/bitrix/ui/index.php)

---

Разработка
----------

[](#разработка)

### Запуск тестов

[](#запуск-тестов-1)

```
composer install
./vendor/bin/phpunit
```

### Статический анализ

[](#статический-анализ-1)

```
./vendor/bin/phpstan analyse src --level=9
```

###  Health Score

54

—

FairBetter than 96% of packages

Maintenance94

Actively maintained with recent releases

Popularity25

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity72

Established project with proven stability

 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 ~147 days

Recently: every ~299 days

Total

13

Last Release

29d ago

Major Versions

1.4.1 → 2.0.02025-05-27

PHP version history (4 changes)1.0.0PHP &gt;=7.0.0

1.2.0PHP &gt;=7.3.0

2.0.0PHP &gt;=8.1

2.1.0PHP &gt;=8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/6265043?v=4)[Gennadiy Sevalnev](/maintainers/Ge1i0N)[@Ge1i0N](https://github.com/Ge1i0N)

---

Top Contributors

[![Ge1i0N](https://avatars.githubusercontent.com/u/6265043?v=4)](https://github.com/Ge1i0N "Ge1i0N (52 commits)")

---

Tags

bitrixbitrix optionsbitrix-settings

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/ge1i0n-bitrix-options/health.svg)

```
[![Health](https://phpackages.com/badges/ge1i0n-bitrix-options/health.svg)](https://phpackages.com/packages/ge1i0n-bitrix-options)
```

###  Alternatives

[bitrix-expert/bbc

Bitrix basis components

10243.3k1](/packages/bitrix-expert-bbc)[bitrix-expert/tools

Helpers for developers on Bitrix

3720.9k1](/packages/bitrix-expert-tools)[bitrix-expert/bbc-module

Module with classes for the basis components

1952.2k1](/packages/bitrix-expert-bbc-module)[maximaster/tools.events

Библиотека осуществляет помощь для автоматической загрузки обработчиков событий при соблюдении определенной структуры

2530.3k](/packages/maximaster-toolsevents)[webarchitect609/bitrix-user-type

Set of custom Bitrix user property types and basic auxiliary functionality to help develop new types as easy and fast as it possible.

1418.7k1](/packages/webarchitect609-bitrix-user-type)[andreyryabin/sprint.options

Content options for 1C-Bitrix

185.8k](/packages/andreyryabin-sprintoptions)

PHPackages © 2026

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