Всем привет.
Недавно, за написанием модуля заметил, что лично мне неудобно каждый раз строить файл с настройками ( /bitrix/modules/<id_модуля>/options.php ). Нет чего-то такого, что есть например в параметрах компонента - чтобы просто задал массивы с табами/группами/настройками и они автоматом построились. Вобщем хочу поделиться классом который у меня получился в попытке решения этой проблемы ( скажу сразу он далек от идеала, хоть и выполняет базовые функции, просто времени на него потрачено пока не очень много - около 3х - 4ч часов ).
Вообщем вот как выглядит сам файл options.php ( сам класс подключался в файле /bitrix/modules/<id_модуля>/include.php ):
B вот что в итоге получилось в админке:

В целом сам процесс построения получился довольно простым. Теперь же хочу остановиться на построении массивов $arGroups, $arOptions ( $arTabs строится без изменений для класса CAdminTabControl ).
$arGroups - это массив групп параметров. Он имеет следующую структуру, которая впринципе не нуждается в объяснении ( все поля обязательны ):
И структура массива $arOptions:
Теперь поподробнее о возможных настройках видов параметров этого массива ( звездочкой обозначены обязательные поля в настройках ).
Общие параметры:
GROUP - ID группы параметров из массива $arGroups*
TITLE - Название параметра
TYPE - Тип параметра*
SORT - Сортировка ( по возрастанию )
REFRESH - Возможность сабмита формы после изменения параметра ( Y / N )
DEFAULT - Значение поля по умолчанию
NOTES - Примечания к параметру
Типы параметров:
STRING - Строка
INT - Число
TEXT - Поле для ввода текста ( textarea )
CHECKBOX - Флажок ( Y / N )
SELECT - Список
MSELECT - Список с множественным выбором
FILE - Файл
COLORPICKER - Выбор цвета
CUSTOM - Настраиваемый тип
Параметры, зависимые от типа:
STRING / INT:
SIZE - Ширина текстового поля
MAXLENGTH - Максимальная длина строки
TEXT:
COLS - Ширина текстового поля
ROWS - Высота текстового поля
SELECT / MSELECT:
VALUES - Массив значений для списка ( такой же как и в функциях SelectBoxFromArray и SelectBoxMFromArray )*
FILE:
FIELD_SIZE - Ширина поля для отображения пути файла
FIELD_READONLY - Не позволять вводить значения в поле для отображения пути файла ( Y / N )
BUTTON_TEXT - Текст на кнопке для открытия файлового менеджера
COLORPICKER:
FIELD_SIZE - Ширина поля для отображения кода цвета
FIELD_READONLY - Не позволять вводить значения в поле для отображения кода цвета ( Y / N )
CUSTOM:
VALUE - HTML код поля*
Ну вот и все на данный момент. Конечно до идеала ему далеко, но кому надо, тот возьмет и допишет то, что требуется.
Недавно, за написанием модуля заметил, что лично мне неудобно каждый раз строить файл с настройками ( /bitrix/modules/<id_модуля>/options.php ). Нет чего-то такого, что есть например в параметрах компонента - чтобы просто задал массивы с табами/группами/настройками и они автоматом построились. Вобщем хочу поделиться классом который у меня получился в попытке решения этой проблемы ( скажу сразу он далек от идеала, хоть и выполняет базовые функции, просто времени на него потрачено пока не очень много - около 3х - 4ч часов ).
Вообщем вот как выглядит сам файл options.php ( сам класс подключался в файле /bitrix/modules/<id_модуля>/include.php ):
<?
$module_id = 'my_company_code.my_module_id';
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/'.$module_id.'/include.php');
IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/'.$module_id.'/options.php');
$showRightsTab = true;
$arSel = array('REFERENCE_ID' => array(1, 3, 5, 7), 'REFERENCE' => array('Значение 1', 'Значение 2', 'Значение 3', 'Значение 4'));
$arTabs = array(
array(
'DIV' => 'edit1',
'TAB' => 'Настройки',
'ICON' => '',
'TITLE' => 'Настройки'
)
);
$arGroups = array(
'MAIN' => array('TITLE' => 'Имя группы', 'TAB' => 0)
);
$arOptions = array(
'TEST_0' => array(
'GROUP' => 'MAIN',
'TITLE' => 'Строка',
'TYPE' => 'STRING',
'DEFAULT' => 'Значение по-умолчанию',
'SORT' => '0',
'NOTES' => 'Это подсказка к полю "Строка".'
),
'TEST_1' => array(
'GROUP' => 'MAIN',
'TITLE' => 'Число',
'TYPE' => 'INT',
'DEFAULT' => '0',
'SORT' => '1',
'REFRESH' => 'Y',
'NOTES' => 'Это подсказка к полю "Число". У данного поля установлен параметр REFRESH = "Y"'
),
'TEST_2' => array(
'GROUP' => 'MAIN',
'TITLE' => 'Текст',
'TYPE' => 'TEXT',
'DEFAULT' => '',
'SORT' => '2',
'COLS' => 40,
'ROWS' => 15,
'NOTES' => 'Это подсказка к полю "Текст". У данного поля установлен параметр COLS = "40", ROWS = "15"'
),
'TEST_2' => array(
'GROUP' => 'MAIN',
'TITLE' => 'Текст',
'TYPE' => 'TEXT',
'DEFAULT' => '',
'SORT' => '2',
'COLS' => 40,
'ROWS' => 15,
'NOTES' => 'Это подсказка к полю "Текст". У данного поля установлен параметр COLS = "40", ROWS = "15"'
),
'TEST_3' => array(
'GROUP' => 'MAIN',
'TITLE' => 'Флажок',
'TYPE' => 'CHECKBOX',
'REFRESH' => 'Y',
'SORT' => '3'
),
'TEST_4' => array(
'GROUP' => 'MAIN',
'TITLE' => 'Список',
'TYPE' => 'SELECT',
'VALUES' => $arSel,
'SORT' => '4'
),
'TEST_5' => array(
'GROUP' => 'MAIN',
'TITLE' => 'Список с множественным выбором',
'TYPE' => 'MSELECT',
'VALUES' => $arSel,
'SORT' => '5'
),
'TEST_6' => array(
'GROUP' => 'MAIN',
'TITLE' => 'Файл',
'TYPE' => 'FILE',
'BUTTON_TEXT' => 'Выбери-ка файл',
'SORT' => '6',
'NOTES' => 'Это поле "Файл".'
),
'TEST_7' => array(
'GROUP' => 'MAIN',
'TITLE' => 'Выбор цвета',
'TYPE' => 'COLORPICKER',
'SORT' => '7'
),
'TEST_8' => array(
'GROUP' => 'MAIN',
'TITLE' => '',
'TYPE' => 'CUSTOM',
'VALUE' => '<span>Это текст в параметре <b>VALUE</b></span>',
'SORT' => '8',
'NOTES' => 'Настраиваемое поле без параметра TITLE'
)
);
/*
Конструктор класса CModuleOptions
$module_id - ID модуля
$arTabs - массив вкладок с параметрами
$arGroups - массив групп параметров
$arOptions - собственно сам массив, содержащий параметры
$showRightsTab - определяет надо ли показывать вкладку с настройками прав доступа к модулю ( true / false )
*/
$opt = new CModuleOptions($module_id, $arTabs, $arGroups, $arOptions, $showRightsTab);
$opt->ShowHTML();
?>
|

В целом сам процесс построения получился довольно простым. Теперь же хочу остановиться на построении массивов $arGroups, $arOptions ( $arTabs строится без изменений для класса CAdminTabControl ).
$arGroups - это массив групп параметров. Он имеет следующую структуру, которая впринципе не нуждается в объяснении ( все поля обязательны ):
$arGroups = array(
'ID_ГРУППЫ_1' => array('TITLE' => 'Заголовок группы 1', 'TAB' => 'Ключ вкладки из массива $arTabs'),
'ID_ГРУППЫ_2' => array('TITLE' => 'Заголовок группы 2', 'TAB' => 'Ключ вкладки из массива $arTabs'),
...
); |
$arOptions = array( 'ID_ПАРАМЕТРА_1' => array( 'GROUP' => 'ID группы в которой находится параметр', 'TITLE' => 'Название параметра', ... ), 'ID_ПАРАМЕТРА_2' => array( 'GROUP' => 'ID группы в которой находится параметр', 'TITLE' => 'Название параметра', ... ), ... ); |
Общие параметры:
GROUP - ID группы параметров из массива $arGroups*
TITLE - Название параметра
TYPE - Тип параметра*
SORT - Сортировка ( по возрастанию )
REFRESH - Возможность сабмита формы после изменения параметра ( Y / N )
DEFAULT - Значение поля по умолчанию
NOTES - Примечания к параметру
Типы параметров:
STRING - Строка
INT - Число
TEXT - Поле для ввода текста ( textarea )
CHECKBOX - Флажок ( Y / N )
SELECT - Список
MSELECT - Список с множественным выбором
FILE - Файл
COLORPICKER - Выбор цвета
CUSTOM - Настраиваемый тип
Параметры, зависимые от типа:
STRING / INT:
SIZE - Ширина текстового поля
MAXLENGTH - Максимальная длина строки
TEXT:
COLS - Ширина текстового поля
ROWS - Высота текстового поля
SELECT / MSELECT:
VALUES - Массив значений для списка ( такой же как и в функциях SelectBoxFromArray и SelectBoxMFromArray )*
FILE:
FIELD_SIZE - Ширина поля для отображения пути файла
FIELD_READONLY - Не позволять вводить значения в поле для отображения пути файла ( Y / N )
BUTTON_TEXT - Текст на кнопке для открытия файлового менеджера
COLORPICKER:
FIELD_SIZE - Ширина поля для отображения кода цвета
FIELD_READONLY - Не позволять вводить значения в поле для отображения кода цвета ( Y / N )
CUSTOM:
VALUE - HTML код поля*
Ну вот и все на данный момент. Конечно до идеала ему далеко, но кому надо, тот возьмет и допишет то, что требуется.