При фильтрации по свойствам типа "Список" выпадающий список появляется автоматически. А вот при фильтрации по свойствам "Привязка к элементам в виде списка" — не получается. Тоже не нашел подходящего решения и написал сам.
Компонент модифицировать не надо, все делается в result_modifier.php компонента bitrix.catalog.filter, скопированного в ваш шаблон.
Ежели чего можно поправить или улучшить, пишите
| Код |
|---|
// ID инфоблока для выборки значений с помощью этого фильтра
$IBLOCK_ID = 3;
// Ищем свойства типа "Е" - привязка к элементам инфоблока
$typeEProps = Array();
foreach ( $arResult['arrProp'] as $key => $arResultProp )
{
if ( $arResultProp['PROPERTY_TYPE'] == 'E' )
{
$typeEProps[] = 'PROPERTY_' . $key;
}
}
// Ищем свойства инфоблока
$properties = Array();
$arProps = CIBlock::GetProperties($IBLOCK_ID);
while ( $prop = $arProps->GetNext() )
{
$properties[] = $prop;
}
// Формируем селекты для всех свойств типа "Е"
foreach ( $typeEProps as $typeEProp )
{
// Ищем свойство в инпутах
$item = $arResult['ITEMS'][$typeEProp];
// Ищем ID связанного инфоблока свойства
foreach ( $properties as $property )
{
if ( $property['NAME'] == $arResult['ITEMS'][$typeEProp]['NAME'] )
{
break;
}
}
// Ищем значения свойства
$values = Array();
$arSpec = CIBlockElement::GetList(array(), array( 'IBLOCK_ID' => $property['LINK_IBLOCK_ID'] ));
while ( $arRes = $arSpec->GetNext() )
{
$values[] = $arRes;
}
// Формируем селект
$valueInputName = $item['INPUT_NAME'];
$arResult['ITEMS'][$typeEProp]['INPUT'] = "<select name='$valueInputName'>";
$arResult['ITEMS'][$typeEProp]['INPUT'] .= "<option value=''>(все)</option>";
foreach ( $values as $value )
{
// Делаем активный элемент
if ( isset( $_REQUEST['arrFilter_pf'][$property['CODE']] )
&& $_REQUEST['arrFilter_pf'][$property['CODE']] == $value['ID']
&& !isset( $_REQUEST['del_filter'] )
)
{
$thisIsActive = " selected";
}
else
{
$thisIsActive = "";
}
$arResult['ITEMS'][$typeEProp]['INPUT'] .= "<option value='" . $value['ID'] . "'" . $thisIsActive . ">" . $value['NAME'] . "</option>";
}
$arResult['ITEMS'][$typeEProp]['INPUT'] .= "</select>";
}
|
В итоге все поля с типом "Е" в фильтре отображаются в виде select.