Изменить текстовое поле на select в catalog.filter
09.08.2015
Понадобилось мне на днях сделать фильтр на очередном проекте, но в стандартном фильтре Битрикса свойство “Привязка элементов” вместо выпадающего списка <select>…</select>, выводится текстовое поле <input type=“text”>. Проблема решилась так:
В файле \bitrix\templates\TEMPLATENAME\components\bitrix\catalog.filter\TEMPLATECOMPONENTNAME\result_modifier.php добавляем
$propsIDs = array();
$linkedBlocks = array();
foreach($arResult["arrProp"] as $id => $array)
if($array["PROPERTY_TYPE"]=="E")
$propsIDs[] = $id;
$rsProps = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array(
"ACTIVE" => "Y",
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"PROPERTY_TYPE" => "E"
)
);
while ($arProps = $rsProps->GetNext())
if(in_array($arProps["ID"],$propsIDs))
$linkedBlocks[$arProps["LINK_IBLOCK_ID"]] = $arProps["ID"];
foreach($linkedBlocks as $prop)
$arResult["ITEMS"]["PROPERTY_".$prop]["INPUT"] = '<select name="'.$arResult["ITEMS"]["PROPERTY_".$prop]["INPUT_NAME"].'">';
$rsLBlocks = CIBlockElement::GetList(Array("NAME"=>"ASC"), Array(
"ACTIVE" => "Y",
"IBLOCK_ID" => array_keys($linkedBlocks)
),
false, false, array()
);
while ($arLBlocks = $rsLBlocks->GetNext())
$arResult["ITEMS"]["PROPERTY_".$linkedBlocks[$arLBlocks["IBLOCK_ID"]]]["INPUT"] .=
'<option value="'.$arLBlocks["ID"].'">'.$arLBlocks["NAME"].'</option>';
foreach($linkedBlocks as $prop)
$arResult["ITEMS"]["PROPERTY_".$prop]["INPUT"] .= '</select>';
#Bitrix
