Неожиданное поведение фильтра в Битрикс: как мы решили проблему сортировки
О проекте
Поступил запрос от клиента: в каталоге товаров фильтры свойств (как товаров, так и торговых предложений) выводятся не в том порядке, который был задан в настройках(поле SORT). Вместо этого сначала отображались свойства товаров, а уже ниже — свойства торговых предложений.
Анализ кода компонента
Первым делом заглянули в ядро Битрикса, чтобы разобраться, как работает стандартный компонент фильтрации( bitrix/components/bitrix/catalog.smart.filter/class.php ). Оказалось, что:
- Множественные запросы к базе данных метода CIBlockProperty::GetByID() выполнялся на каждой итерации, что приводило к 30 дополнительным запросам при наличии 30 свойств(легко посчитать маштаб Морти)
- Отсутствие сортировки – финальный набор параметров не учитывал заданную сортировку, из-за чего свойства выводились в непредсказуемом порядке.
Решение
Мы решили проблему следующим образом:
- Добавили логику сортировки – вынесли компонент в собственное пространство имен и расширили стандартный функционал.
- Оптимизировали запросы – устранили множественные обращения к базе данных, заменив одним запросом.
- Учли приоритеты свойств – обеспечили правильный порядок вывода свойств в соответствии с настройками административной панели.
Итог
После доработки фильтр стал работать корректно: свойства товаров и торговых предложений теперь сортируются так, как задумано, без лишних запросов. Клиент остался доволен, а мы — еще раз убедились, что иногда стандартные решения требуют тонкой шрифовки.
Вывод
Если столкнулись с подобной проблемой — не спешите переписывать компонент с нуля. Иногда достаточно небольшой доработки, чтобы заработало как надо.
Технологии

