Битрикс – как добавить дополнительные параметры

Добавление новых параметров в компонентах и шаблонах – не одно и тоже. Разбираемся на примерах.

Как добавить выбор инфоблока в своем компоненте Битрикса

Параметры компонента находятся в файле .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, благодаря этому при выборе типа инфоблока и самого инфоблока происходит перезагрузка параметров.
Запись компонента при этом будет иметь такой вид:

$APPLICATION->IncludeComponent(
	"rdy:file.import", 
	".default", 
	array(
		"COMPONENT_TEMPLATE" => ".default",
		"IBLOCK_TYPE" => "catalog",
		"IBLOCK_ID" => "16",
		"IBLOCK_SKU_ID" => "17",
		"FILE" => '/upload/file.csv'
	),
	false,
	array(
		"HIDE_ICONS" => "N"
	)
);

Файл с переводами выглядит так:

$MESS["IBLOCK_TYPE"] = "Тип инфоблока";
$MESS["IBLOCK_IBLOCK"] = "Инфоблок";
$MESS["IBLOCK_PROPERTY"] = "Свойства";
$MESS["FILE_PATH"] = "Путь к файлу";

Как дополнить параметрами шаблон компонента в Битриксе

Задача. Вывести тип баннера для компонента. Используется привязка к элементу.

 "ASC"),
	Array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y"),
	false,
	false,
	Array('ID', 'NAME', 'CODE')
);
while ($arItem = $res->GetNext()) {
	$arTypes[$arItem["CODE"]] = $arItem["NAME"];
}

$arTemplateParameters = array(
	"BANNER_TYPE_THEME" => Array(
		"NAME" => "Выберите Тип баннера",
		"TYPE" => "LIST",
		"VALUES" => $arTypes
	),
);

Как видно по коду, тут ID инфоблока – хардкод, что в идеале поправить на динамические параметры. Также, фразу “Выберите Тип баннера” – хорошо бы вынести в языковые файлы, но для наглядности этот пример сгодится.

Теперь мы можем указывать тип баннера, а в параметрах это выглядит так:

$APPLICATION->IncludeComponent(
	"aspro:com.banners.mshop", 
	"top_slider_banners", 
	array(
		"BANNER_TYPE_THEME" => "CON_SLIDERS",
...

Главное не провтыкать, что $arTemplateParameters – это массив с параметрами шаблона компонента, а $arComponentParameters – параметры самого компонента 🙂 .
Вот таким образом можно расширить параметры своих и родных компонентов в Битриксе.

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *