В Битрикс добавление новых параметров в компоненты и шаблоны – это разные процессы. Рассмотрим оба варианта с примерами кода.
1. Добавление параметров в компонент Битрикс
Параметры компонента хранятся в файле .parameters.php в корневой папке компонента. Если файла нет – создайте его.
Пример кода для выбора инфоблока
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
if (!CModule::IncludeModule("iblock")) return;
// Получение типов инфоблоков
$arTypesEx = CIBlockParameters::GetIBlockTypes(["-" => " "]);
// Получение списка инфоблоков
$db_iblock = CIBlock::GetList(
["SORT" => "ASC"],
[
"SITE_ID" => $_REQUEST["site"],
"TYPE" => ($arCurrentValues["IBLOCK_TYPE"] != "-" ? $arCurrentValues["IBLOCK_TYPE"] : "")
]
);
// Получение свойств инфоблока
$rsProp = CIBlockProperty::GetList(
["sort" => "asc", "name" => "asc"],
[
"ACTIVE" => "Y",
"IBLOCK_ID" => (isset($arCurrentValues["IBLOCK_ID"]) ? $arCurrentValues["IBLOCK_ID"] : $arCurrentValues["ID"])
]
);
// Настройки сортировки
$arSorts = ["ASC" => GetMessage("T_IBLOCK_DESC_ASC"), "DESC" => GetMessage("T_IBLOCK_DESC_DESC")];
$arSortFields = [
"ID" => GetMessage("T_IBLOCK_DESC_FID"),
"NAME" => GetMessage("T_IBLOCK_DESC_FNAME"),
"ACTIVE_FROM" => GetMessage("T_IBLOCK_DESC_FACT"),
"SORT" => GetMessage("T_IBLOCK_DESC_FSORT"),
"TIMESTAMP_X" => GetMessage("T_IBLOCK_DESC_FTSAMP")
];
// Формирование списка инфоблоков и свойств
$arIBlocks = [];
$arProperty_LNS = [];
while ($arRes = $db_iblock->Fetch()) {
$arIBlocks[$arRes["ID"]] = "[" . $arRes["ID"] . "] " . $arRes["NAME"];
}
while ($arr = $rsProp->Fetch()) {
$arProperty[$arr["CODE"]] = "[" . $arr["CODE"] . "] " . $arr["NAME"];
if (in_array($arr["PROPERTY_TYPE"], ["L", "N", "S"])) {
$arProperty_LNS[$arr["CODE"]] = "[" . $arr["CODE"] . "] " . $arr["NAME"];
}
}
// Настройка параметров компонента
$arComponentParameters = [
"PARAMETERS" => [
"IBLOCK_TYPE" => [
"PARENT" => "BASE",
"NAME" => GetMessage("IBLOCK_TYPE"),
"TYPE" => "LIST",
"VALUES" => $arTypesEx,
"DEFAULT" => "news",
"REFRESH" => "Y",
],
"IBLOCK_ID" => [
"PARENT" => "BASE",
"NAME" => GetMessage("IBLOCK_IBLOCK"),
"TYPE" => "LIST",
"VALUES" => $arIBlocks,
"DEFAULT" => '={$_REQUEST["ID"]}',
"ADDITIONAL_VALUES" => "Y",
"REFRESH" => "Y",
],
"FILE" => [
"PARENT" => "BASE",
"NAME" => GetMessage("FILE_PATH"),
"TYPE" => "STRING",
"DEFAULT" => '/upload/file.csv',
],
]
];Ключевые моменты:
-
REFRESH => "Y"обновляет параметры при изменении типа инфоблока. -
Параметры компонента задаются в массиве
$arComponentParameters.
Вызов компонента с параметрами
$APPLICATION->IncludeComponent(
"rdy:file.import",
".default",
[
"COMPONENT_TEMPLATE" => ".default",
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "16",
"FILE" => '/upload/file.csv'
],
false,
["HIDE_ICONS" => "N"]
);2. Добавление параметров в шаблон компонента
Параметры шаблона задаются в файле component.php или template.php через массив $arTemplateParameters.
Пример: выбор типа баннера
$IBLOCK_ID = 10; // Лучше заменить на динамический параметр
$arTypes = [];
$res = CIBlockElement::GetList(
["NAME" => "ASC"],
["IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y"],
false,
false,
['ID', 'NAME', 'CODE']
);
while ($arItem = $res->GetNext()) {
$arTypes[$arItem["CODE"]] = $arItem["NAME"];
}
$arTemplateParameters = [
"BANNER_TYPE_THEME" => [
"NAME" => "Выберите тип баннера",
"TYPE" => "LIST",
"VALUES" => $arTypes
],
];Рекомендации:
-
Замените хардкод
$IBLOCK_IDна динамический параметр. -
Выносите текстовые значения в языковые файлы (
/lang/ru/template.php).
Вызов компонента с параметром шаблона
$APPLICATION->IncludeComponent(
"aspro:com.banners.mshop",
"top_slider_banners",
[
"BANNER_TYPE_THEME" => "CON_SLIDERS",
// другие параметры...
]
);Вывод
-
Параметры компонента настраиваются в
.parameters.php($arComponentParameters). -
Параметры шаблона задаются в
$arTemplateParameters. -
Используйте
REFRESH => "Y"для динамического обновления параметров.