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