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

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

Добрый день!
Подскажите пожалуйста, как в фильтре вывести для множественного поля только те значения, которые используются в элементах, а не весь справочник?
В инфоблоке есть множественное свойство с привязкой к элементам другого инфоблока (я так понимаю, аналог использования значений справочников). При вставке фильтра на страницу в поле этого свойства отображаются все имеющиеся значения привязанного инфоблока, а нужно, чтобы выводились только задействованные значения.
Спасибо!
  • Вопрос задан
  • 3877 просмотров
Пригласить эксперта
Ответы на вопрос 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 делать не надо, все уже сделано за вас.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
от 300 000 до 500 000 ₽
08 мая 2024, в 13:52
1500 руб./за проект
08 мая 2024, в 13:41
2000 руб./за проект