Файл
.parameters.php содержит описание параметров компонента. Данные файла нужны для отображения формы настроек компонента:
Структура файла может иметь следующий вид:
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
//формирование массива параметров
$arComponentParameters = array(
"GROUPS" => array(
"LIST" => array(
"NAME" => "Списки",
"SORT" => "300",
),
),
"PARAMETERS" => array(
"STRING" => array(
"PARENT" => "BASE",
"NAME" => "Строка",
"TYPE" => "STRING",
"DEFAULT" => "Значение по умолчанию"
),
"CHECKBOX" => array(
"PARENT" => "BASE",
"NAME" => "Одиночный чекбокс",
"TYPE" => "CHECKBOX",
),
"LIST_SINGLE" => array(
"PARENT" => "LIST",
"NAME" => "Список",
"TYPE" => "LIST",
"VALUES" => array(
"1" => "Первый",
"2" => "Второй",
"3" => "Третий",
),
"MULTIPLE" => "N",
),
"LIST_MULTIPLE" => array(
"PARENT" => "LIST",
"NAME" => "Множественный список",
"TYPE" => "LIST",
"VALUES" => array(
"1" => "Первый",
"2" => "Второй",
"3" => "Третий",
),
"MULTIPLE" => "Y",
),
"LIST_MULTIPLE_ADD" => array(
"PARENT" => "LIST",
"NAME" => "Множественный список",
"TYPE" => "LIST",
"VALUES" => array(
"1" => "Первый",
"2" => "Второй",
"3" => "Третий",
),
"MULTIPLE" => "Y",
"ADDITIONAL_VALUES" => "Y"
),
),
);
Для удобства я не использовал lang файл для описания параметров (а-та-та, так делать плохо). Как видно из кода, в файле формируется массив $arComponentParameters, который состоит из двух ключей: GROUPS и PARAMETERS.
В GROUPS задаются массивы, описывающие разделы (группы) настроек. На скрине: "Шаблоны", "Основные параметры", "Списки". По умолчанию, в любом компоненте присутствуют следующие группы:
- ADDITIONAL_SETTINGS - появляется при указании SET_TITLE;
- CACHE_SETTINGS - настройки кэша, появляется при указании CACHE_TIME;
- SEF_MODE - настройки ЧПУ;
- URL_TEMPLATES - шаблоны ссылок;
- VISUAL - настройки внешнего вида;
- DATA_SOURCE - источник данных, ID и TYPE инфоблока;
- BASE - основные параметры;
- AJAX_SETTINGS - настройки AJAX.
Описание группы содержит два ключа: NAME - название группы выводимое на форме и SORT - внутренняя сортировка.
"LIST" => array(
"NAME" => "Списки",
"SORT" => "300",
),
Значением ключа PARAMETERS является массив параметров компонента. Простейшее описание может иметь следующий вид:
"код параметра" => array(
"PARENT" => "код группы", // если пустое - ставится ADDITIONAL_SETTINGS
"NAME" => " название параметра на текущем языке", //рекомендуется подключение из lang файлов с помощью GetMessage(),
"TYPE" => "тип элемента управления, в котором будет устанавливаться параметр",
"REFRESH" => "перегружать настройки или нет после выбора (N/Y)",
"MULTIPLE" => "одиночное/множественное значение (N/Y)",
"VALUES" => "массив значений для списка ('TYPE' = 'LIST')",
"ADDITIONAL_VALUES" => "показывать поле для значений, вводимых вручную (Y/N)",
"SIZE" => "число строк для списка (если нужен не выпадающий список)",
"DEFAULT" => "значение по умолчанию",
"COLS" => "ширина поля в символах",
), Ключ TYPE может принимать одно из следующих значений:
LISTдля спискаSTRINGдля поля вводаCHECKBOXдля чекбоксаCUSTOMдля своих элементов управления
MULTIPLE и ADDITIONAL_VALUES, список ('TYPE' = 'LIST') может принимать следующий вид:
В некоторых случаях требуется заполнять списки значениями из инфоблоков, в этом случае можно использовать средства API и формировать массивы для
VALUES до определения массива $arComponentParameters. В следующем примере для параметров IBLOCK_TYPE и IBLOCK_ID формируются массивы $paramIBlockTypes и $paramIBlocks соответственно. if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
if (!CModule::IncludeModule("iblock"))
{
ShowMessage(GetMessage("IBLOCK_ERROR"));
return false;
}
// Получение списка типов инфоблоков
$dbIBlockTypes = CIBlockType::GetList(array("SORT"=>"ASC"), array("ACTIVE"=>"Y"));
while ($arIBlockTypes = $dbIBlockTypes->GetNext())
{
$paramIBlockTypes[$arIBlockTypes["ID"]] = $arIBlockTypes["ID"];
}
// Получение списка инфоблоков заданного типа
$dbIBlocks = CIBlock::GetList(
array(
"SORT" => "ASC"
),
array(
"ACTIVE" => "Y",
"TYPE" => $arCurrentValues["IBLOCK_TYPE"],
));
while ($arIBlocks = $dbIBlocks->GetNext())
{
$paramIBlocks[$arIBlocks["ID"]] = "[" . $arIBlocks["ID"] . "] " . $arIBlocks["NAME"];
}
// Формирование массива параметров
$arComponentParameters = array(
"GROUPS" => array(
),
"PARAMETERS" => array(
"IBLOCK_TYPE" => array(
"PARENT" => "BASE",
"NAME" => GetMessage("IBLOCK_TYPE"),
"TYPE" => "LIST",
"VALUES" => $paramIBlockTypes,
"REFRESH" => "Y",
"MULTIPLE" => "N",
),
"IBLOCK_ID" => array(
"PARENT" => "BASE",
"NAME" => GetMessage("IBLOCK_ID"),
"TYPE" => "LIST",
"VALUES" => $paramIBlocks,
"REFRESH" => "Y",
"MULTIPLE" => "N",
),
),
); Заметьте, что при использовании "REFRESH" => "Y", значения выбранных свойств можно получить из массива $arCurrentValues. Таким образом можно реализовать сложную логику зависимостей между параметрами.
Помимо
.parameters.php, хранящегося в папке компонента, стандартные настройки можно дополнять, создавая одноименные файлы в папке шаблона. Описанные в этом файле параметры будут отображаться только если выбран соответствующий шаблон компонента. Структура файла: if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$arTemplateParameters = array(
"PROP" => array(
"NAME" => "Параметр из template",
"TYPE" => "STRING",
"DEFAULT" => "N",
),
);