@box0
и швец, и жнец, и на дуде игрец

Как вывести в фильтре значения множественного поля?

Добрый день!
Подскажите пожалуйста, как в фильтре вывести для множественного поля только те значения, которые используются в элементах, а не весь справочник?
В инфоблоке есть множественное свойство с привязкой к элементам другого инфоблока (я так понимаю, аналог использования значений справочников). При вставке фильтра на страницу в поле этого свойства отображаются все имеющиеся значения привязанного инфоблока, а нужно, чтобы выводились только задействованные значения.
Спасибо!
  • Вопрос задан
  • 3885 просмотров
Пригласить эксперта
Ответы на вопрос 3
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Либо поставить бету версию нового smart.filter (возможно его уже зарелизили) с фасетным поиском, либо взять одно из решений из marketplace'a.
Чтобы не быть обвинённым в рекламе могу прислать ссылку на решение которым пользуюся я.
Ответ написан
Комментировать
@box0 Автор вопроса
и швец, и жнец, и на дуде игрец
Алексей Емельяно, благодарю за подсказку насчет фасетного поиска.

Пошла самым простым путем: т.к. такой фильтр нужен только в одном разделе, то я скопировала компонент "search.filter" и в файле "result_modifier.php" добавила код для исключения из массива результата тех значений заданного свойства, которые не используются в элементах информационного блока.
Код инфоблока = 4, код исходного свойства = 252. Также используется фильтр по активным записям (ACTIVE) и по датам активности (ACTIVE_DATE). Для выборки всех различных значений свойства с кодом 252 (PROPERTY_252) использовала группировку (третий параметр-массив функции GetList).

$IDs = [];
$rs = CIBlockElement::GetList(array(), array("IBLOCK_ID" => 4, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "!PROPERTY_252" => false), array("PROPERTY_252"));
while($ar = $rs->GetNext()) {
$IDs[] = $ar['PROPERTY_252_VALUE'];
}

Затем сделала проверку, в которой с помощью регулярных выражений из массива $arResult['ITEMS']['PROPERTY_252']['INPUT'] удалила все значения, которых нет в полученном массиве $IDs.
Profit!
Ответ написан
Комментировать
В компоненте умного фильтра (catalog.smart.filter) значения, которые не должны выводиться (нет у отобранных товаров), насколько я помню, помечаются ключом "DISABLED".
OxmOeuP.png
То есть дополнительных запросов в result_modifier.php делать не надо, все уже сделано за вас.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы