PHP code example of ge1i0n / bitrix-options

1. Go to this page and download the library: Download ge1i0n/bitrix-options library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

ge1i0n / bitrix-options example snippets


Bitrix\Main\Loader::ule.id', [
    Tab::make('first', 'Первая вкладка', []),
    Tab::make('second', 'Вторая вкладка', []),
]);

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'),
    ]),
]);

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'  => 'Тёмная',
            ]),
    ]),
]);

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

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

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

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

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

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::make('DATE_OPTION', 'Я поле даты');

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

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

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

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

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

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

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

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

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

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);
    }
}

// Запись тестового значения
\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);

use Gelion\BitrixOptionsMigration\Migrator;

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

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

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