Файл .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",
),
);
Круто бы добавить в эту статью инфу как добавлять подсказки. Что то не нашел. Вот тут описано: dev.1c-bitrix.ru
Особенно обратить внимание на: UPD. На текущий момент нет необходимости создавать отдельный lang-файл с подсказками. Их достаточно сохранить в lang-файле .parameters.php (как для компонента, так и для шаблона компонента). Формат подсказок прежний.
Кажется: Добавляем в языковой файл $MESS[{PARAMETER_CODE}_TIP] = 'Подсказка'; и радуемся.
"Файл .parametars.php содержит описание параметров компонента.". Название файла в начале статьи выглядит как очепятка.
Да, спасибо, ушло целых 4 года на исправление этой ошибки)
А статья все еще актуальная, и одна из лучших ;)
Спасибо, готовлю к выпуску еще)
Возможно ли удалить встроенный параметр компонента (заданный не через .parameters.php)?
По идее, все параметры компонента задаются через .parameters.php (либо самого компонента, либо шаблона). Некоторые параметры (например AJAX) задаются целыми группами. О каком параметре идет речь?
Именно о параметрах компонента, оговорился по поводу "не .parameters.php". К примеру в \bitrix\components\bitrix\catalog\.parameters.php задается $arComponentParameters, а в .parameters.php в шаблоне компонента эта переменная недоступна. Хочется создать шаблон в котором "ненужные" параметры скрыты от глаз или изменены, а в параметрах вывода компонента уже вшито нужное значение. Клонированием компонента, если я не ошибаюсь, мы теряем его обновления :(
Совершенно случайно наткнулся на эту запись. Это решение моего вопроса.
Не знал про эту особенность. Полезно.