Файл
.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", ), );