Всем привет.
Недавно, за написанием модуля заметил, что лично мне неудобно каждый раз строить файл с настройками ( /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 код поля*
Ну вот и все на данный момент. Конечно до идеала ему далеко, но кому надо, тот возьмет и допишет то, что требуется.