Файл настройки параметров компонента Bitrix (.parameters.php)

Файл настройки параметров компонента Bitrix (.parameters.php)
Файл .parametars.php содержит описание параметров компонента. Данные файла нужны для отображения формы настроек компонента:
Параметры компонента.PNG
Структура файла может иметь следующий вид:
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') может принимать следующий вид:
Списки.PNG
В некоторых случаях требуется заполнять списки значениями из инфоблоков, в этом случае можно использовать средства 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",
    ),

);

Возврат к списку