Добавление новых параметров в компонентах и шаблонах – не одно и тоже. Разбираемся на примерах.
Как добавить выбор инфоблока в своем компоненте Битрикса
Параметры компонента находятся в файле .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 – параметры самого компонента 🙂 .
Вот таким образом можно расширить параметры своих и родных компонентов в Битриксе.