СезонГотовим магазин к высокому сезону и Чёрной пятнице: скорость, нагрузка, акции

Фильтр по цене и диапазонам в 1С-Битрикс: бегунок, шаги и скорость

Фильтр по цене и диапазонам в 1С-Битрикс: бегунок, шаги и скорость

Фильтр по цене — самый нажимаемый элемент любого каталога. Покупатель ещё не выбрал бренд и характеристики, но уже отсекает то, что ему не по карману: тянет бегунок или ставит галочку «до 10 000». Если этот фильтр работает точно и быстро — человек за секунду сужает выдачу до товаров в своём бюджете. Если же цена в фильтре не совпадает с ценником в карточке, бегунок «дёргается» на странных числах, а на большом каталоге страница задумывается на пару секунд — покупатель раздражается и уходит, а вы теряете заказ на ровном месте.

В этой статье разберём фильтр по цене в 1С-Битрикс без общих слов: чем цена отличается от обычного числового свойства и почему её обрабатывают особо, как устроен и настраивается бегунок цены (slider), когда выгоднее готовые ценовые диапазоны, а когда плавный ползунок, как задавать шаги и округление, как числовой фильтр хранит цену в фасете через диапазоны, какая именно цена попадает под фильтр с учётом скидок, акций и группы клиента, что делать при нескольких типах цен (розница и опт), как быть с валютой, счётчиками и пустыми результатами и как удержать скорость на большом каталоге. Материал — выжимка из наших внедрений по разработке каталога товаров на 1С-Битрикс, где фильтр по цене настраивается так, чтобы совпадать с ценником и не тормозить витрину.

Коротко

  • Цена в фильтре — это не строковое свойство, а числовое значение типа цены из торгового каталога; фильтровать её строкой — грубая ошибка.
  • Бегунок цены даёт плавно задать «от» и «до»; готовые диапазоны проще для быстрого выбора и лучше индексируются — их часто совмещают.
  • Шаги и округление бегунка задают под порядок цен каталога, а минимум/максимум берут из реального диапазона цен.
  • Числовой фильтр опирается на фасетный индекс: цена хранится диапазонно, поэтому поиск по интервалу быстрый и без перебора товаров.
  • Фильтруемую цену согласуют с той, что видит покупатель: с учётом скидок, акций и группы клиента, иначе ценник и диапазон разойдутся.
  • При нескольких типах цен (розница/опт) каждая группа фильтрует по своей цене; фасет пересобирают после изменения цен и обмена с 1С.

Чем фильтр по цене отличается от обычного

На первый взгляд цена — это просто число, и фильтр по ней ничем не отличается от фильтра по объёму памяти или диагонали. На практике цена — особый случай, и понимать это отличие важно, потому что из него вытекают почти все тонкости настройки.

Во-первых, цена в 1С-Битрикс — это не свойство инфоблока, а сущность модуля торгового каталога. У товара может быть несколько цен разных типов (розница, опт, для дилеров), они хранятся в отдельных таблицах, привязаны к валюте и к правам доступа. Умный фильтр знает про эту специфику и умеет работать с типами цен как с числовым источником для фасета.

Во-вторых, цена подвижна. Обычное свойство (цвет, материал) меняется редко, а цена пересчитывается при каждом обмене с 1С, при запуске акции, при смене курса валюты. Значит, границы фильтра и фасетный индекс по цене должны переобновляться чаще, чем по статичным свойствам.

В-третьих, цена персональна. Один и тот же товар для розничного покупателя стоит одно, для оптовика — другое, а со скидкой по акции — третье. Поэтому вопрос «какую именно цену фильтруем» не праздный: от ответа зависит, совпадёт ли фильтр с ценником, который видит конкретный покупатель.

Из-за этих трёх свойств — «цена из торгового каталога», «цена подвижна», «цена персональна» — фильтр по цене требует отдельного внимания при настройке, хотя визуально это всего лишь бегунок. Сам механизм умного фильтра, в который встроена цена, мы подробно разбирали в статье про умный фильтр в 1С-Битрикс; здесь фокус именно на цене и числовых диапазонах.

Терминология: «тип цены» — вид цены товара в торговом каталоге (розница, опт и т. д.). «Числовой фильтр» — фильтр по числовому значению с диапазоном «от–до». «Бегунок / слайдер» — ползунок с двумя ручками для задания границ. «Фасет» (фасетный индекс) — заранее посчитанная таблица, по которой фильтр работает быстро. «Пресет диапазона» — готовый интервал цены (например, «до 10 000»). Дальше эти слова используются строго в этих значениях.

Числовые свойства и цена в умном фильтре

Умный фильтр каталога умеет работать с двумя видами числовых источников, и их важно не путать, потому что настраиваются они по-разному.

Числовые свойства инфоблока

Это обычные свойства товара с типом «Число»: вес, объём, диагональ, мощность, длина. Для таких свойств умный фильтр умеет показывать диапазонный интерфейс — два поля «от» и «до» или бегунок. Ключевое условие — свойство должно иметь именно числовой тип, а не строковый. Тогда сравнение и сортировка идут по числу, а не по тексту, и фасет строит по свойству корректный диапазон.

Цена как источник фильтра

Цена — это не свойство инфоблока, а значение типа цены из торгового каталога. В настройках умного фильтра типы цен выводятся отдельным блоком, наряду со свойствами: вы выбираете, какие типы цен показывать в фильтре и в каком виде. Внешне для покупателя это выглядит так же, как числовой фильтр (бегунок «от–до»), но внутри Битрикс берёт значение не из свойства, а из таблицы цен, учитывая права доступа к типу цены и настройки скидок.

Практический вывод: когда вы «добавляете фильтр по цене», вы включаете в умном фильтре нужный тип цены, а не создаёте числовое свойство «Цена». Ошибка, когда цену заводят отдельным строковым или числовым свойством инфоблока и фильтруют по нему, — одна из самых частых и самых болезненных; о ней подробно в разделе про частые ошибки. Правильно — использовать штатный механизм типов цен торгового каталога.

Источник фильтраЧто этоКак включить в фильтре
Числовое свойствоСвойство инфоблока типа «Число» (вес, диагональ)Отметить свойство в настройках умного фильтра, задать вид «диапазон/бегунок»
Тип ценыЦена товара из торгового каталога (розница, опт)Отметить нужный тип цены в блоке цен настроек умного фильтра
Строковое свойство с числомАнтипаттерн: число хранится как текстТак делать нельзя — диапазон и сортировка сломаются

Бегунок (slider) цены и его настройка

Бегунок цены — привычный покупателю интерфейс: горизонтальная шкала с двумя ручками «от» и «до» и обычно с полями ручного ввода границ. Он удобен именно для цены, потому что разброс цен часто большой, а покупатель хочет задать свой бюджет плавно, а не выбирать из фиксированных интервалов.

Из чего складывается работа бегунка:

Технически бегунок — это часть шаблона компонента умного фильтра. Штатный шаблон умного фильтра уже содержит слайдер цены на JavaScript; его вид, шаг, поведение ручек и способ применения настраивают, копируя шаблон компонента bitrix:catalog.smart.filter в шаблон сайта и правя вёрстку и скрипт. Логику получения границ (мин/макс из фасета) при этом обычно не трогают — её обеспечивает сам компонент.

Важная деталь UX: бегунок должен сужаться вместе с выдачей. Если покупатель уже выбрал бренд и осталось три товара, шкала цены в идеале показывает диапазон именно этих трёх, а не всего каталога. Это поведение обеспечивает фасетный режим фильтра — он пересчитывает доступные границы под текущую комбинацию условий.

Бегунок цены: как устроен слайдер min каталога max каталога от до 5 000 30 000 выбранный диапазон = синяя часть шкалы границы min/max берутся из фасета и сужаются вместе с выдачей
Схема: шкала бегунка идёт от минимальной до максимальной цены каталога, ручки «от» и «до» задают диапазон, а синхронные поля позволяют вписать границы вручную.

Готовые диапазоны или плавный бегунок

Есть два принципиально разных способа дать покупателю фильтровать по цене: плавный бегунок и набор готовых ценовых диапазонов (пресетов) в виде чекбоксов или ссылок. У каждого свои сильные стороны, и выбор — это проектное решение под конкретный каталог.

Плавный бегунок

Ползунок «от–до» хорош, когда разброс цен большой, а покупатели задают самые разные бюджеты. Он гибок: можно задать любую границу. Минусы — он требует осознанного действия (подумать, куда тянуть), хуже работает как отдельная SEO-страница и на неудачной настройке даёт «некрасивые» числа.

Готовые диапазоны

Пресеты вроде «до 10 000», «10 000–30 000», «свыше 30 000» — это заранее заданные интервалы. Их плюсы: быстрый выбор в один клик, понятные «круглые» границы, защита от абсурдных значений и, главное, возможность сделать из каждого диапазона отдельную посадочную страницу под запрос «товар до N рублей». Минусы — жёсткость: покупатель ограничен теми интервалами, что вы задали.

КритерийПлавный бегунокГотовые диапазоны
Гибкость границЛюбые значения «от–до»Только заданные интервалы
Скорость выбораНужно подумать и потянутьОдин клик по пресету
SEO-страницыПлохо: параметрический URLХорошо: отдельные страницы «до N»
«Красивые» числаЗависит от шага и округленияВсегда круглые по определению
Широкий разброс ценРаботает отличноНужно много интервалов
Узкий однородный каталогИзбыточенДостаточно 3–4 пресетов

На практике эти способы не конкурируют, а дополняют друг друга. Частое хорошее решение — основной бегунок цены плюс несколько кнопок-пресетов над ним для самых ходовых бюджетов. Тогда покупатель, который хочет быстро, жмёт пресет, а тот, кому нужна точность, тянет ползунок. А для SEO ходовые ценовые диапазоны оформляют как посадочные страницы фильтра — эту технику мы разбирали в статье про фасетную навигацию и SEO.

Готовые диапазоны Плавный бегунок до 10 000 10 000 — 30 000 30 000 — 60 000 свыше 60 000 клик в один шаг · SEO-страницы «до N» любые границы · широкий разброс цен Лучшее решение — совместить: пресеты + бегунок на одной панели +
Схема: готовые диапазоны дают быстрый клик и SEO-страницы, бегунок — гибкость на широком разбросе цен; на практике их совмещают в одной панели фильтра.

Шаги, округление и «красивые» границы

Мелочь, которая сильно влияет на восприятие фильтра, — как выглядят числа. Плохо настроенный бегунок показывает границы вроде «9 837 — 41 213», и это выглядит неаккуратно, путает покупателя и плодит лишние варианты URL. Хорошо настроенный — «10 000 — 40 000». За это отвечают шаг и округление.

Шаг бегунка

Шаг — это дискретность перемещения ручки. Универсального значения нет, его подбирают под порядок цен каталога:

Округление границ

Округление касается двух вещей. Первое — крайние точки шкалы (мин/макс каталога): фактические «9 837» и «41 213» округляют до удобных «9 000/9 500» вниз и «42 000» вверх, чтобы шкала выглядела аккуратно и охватывала весь диапазон. Второе — введённые покупателем границы: их приводят к «круглым» значениям по шагу, чтобы в URL и в выдаче не плодились почти одинаковые запросы.

Технически и шаг, и округление задаются в шаблоне компонента умного фильтра — в его JavaScript-логике слайдера. Крайние точки диапазона приходят из фасета как фактические мин/макс, а «красивое» округление накладывают уже в шаблоне. Это одна из типовых доработок при кастомизации фильтра: штатный вид работает, но «причёсывание» чисел заметно улучшает и UX, и SEO.

Практика: договоритесь о правиле округления один раз и примените его и к бегунку, и к пресетам, и к SEO-страницам. Когда шаг слайдера, границы готовых диапазонов и адреса посадочных страниц «до N» построены по одной логике округления, каталог выглядит цельно, а поисковик не получает десятки почти дублирующихся ценовых URL.

Как цена попадает в фасет: диапазонное хранение

Чтобы понять, почему фильтр по цене быстрый (или медленный), нужно разобраться, как цена хранится в фасетном индексе. Фасет — это заранее посчитанная таблица, которая отвечает на вопрос «какие товары попадают под такое-то условие фильтра» без перебора всех товаров в реальном времени.

Со строковыми свойствами (цвет, бренд) всё просто: в фасете хранится связка «значение свойства → товары». Но цена — величина непрерывная, значений бесконечно много, хранить связку «каждая цена → товары» бессмысленно. Поэтому числовые величины, включая цену, фасет хранит диапазонно: непрерывную шкалу цен режут на интервалы, и в индексе хранится, какие товары попадают в какой ценовой интервал. Когда покупатель задаёт границы «от–до», система быстро определяет, какие интервалы попадают в запрос, и собирает товары из них.

Что из этого следует практически:

Именно поэтому фасетный индекс — сердце быстрого фильтра по цене. Он включается и пересобирается в настройках инфоблока каталога, и без него числовой фильтр либо не работает в фасетном режиме, либо считает медленно. Подробнее про сам механизм фасета и его SEO-применение — в материале о фасетной навигации.

Цена в фасете: диапазонное хранение Непрерывная шкала цен → 0–10 000товары A, B, C 10–30 000товары D, E 30–60 000товары F, G, H 60 000+товары I Запрос: цена от 10 000 до 60 000 берём готовые интервалы D,E,F,G,H — без перебора всех товаров
Схема: шкала цен режется на интервалы, фасет хранит состав каждого интервала, а запрос «от–до» собирает готовые интервалы — поэтому фильтр по цене быстрый.

Какая цена фильтруется: скидки и группа клиента

Это, пожалуй, самый важный и самый недооценённый вопрос настройки. Товар может иметь базовую цену, цену конкретной группы покупателей и итоговую цену со скидками и акциями. Вопрос — по какой из них работает фильтр — определяет, совпадёт ли бегунок с ценником в карточке.

Разберём слои цены, из которых складывается то, что видит покупатель:

Опасность в том, что фильтр и ценник могут опираться на разные слои. Классический сбой: карточка показывает цену со скидкой «9 900», а умный фильтр настроен на базовую цену «11 000», поэтому по запросу «до 10 000» этот товар не покажется, хотя на витрине он стоит меньше 10 000. Покупатель видит расхождение и теряет доверие к фильтру.

Как это решают:

  1. Определяют «цену истины». Решают, какую цену видит покупатель на витрине и какую логично фильтровать: базовую, цену группы или итоговую со скидками.
  2. Согласуют фильтр с ценником. Настраивают умный фильтр так, чтобы он фильтровал по той же цене, что отображается покупателю его группы.
  3. Взвешивают учёт скидок в фасете. Учёт динамических скидок в фильтре точнее для покупателя, но тяжелее для производительности (часть расчёта уходит из статичного индекса). Это компромисс, который принимают осознанно.
  4. Проверяют на реальных группах. Тестируют под разными группами покупателей: совпадает ли диапазон фильтра с тем, что каждая группа видит в карточке.

Отдельно про группу клиента. Поскольку цена персональна, «правильная» цена для фильтра зависит от того, кто фильтрует. Розничный покупатель должен фильтровать по рознице, оптовый — по опту. Это работает, если типы цен и права доступа настроены корректно и нужные типы включены в умный фильтр. Тему цен по группам мы подробно разбирали в статье про оптовые цены по группам в 1С-Битрикс — она напрямую связана с тем, какая цена попадёт в фильтр.

Какая цена попадает в фильтр Базовая цена Цена группырозница / опт / дилер Скидки и акцииправила работы с ценой Итоговая цена = то, что видит покупатель Фильтр должен совпадать Ценник в карточке и диапазон фильтра — одна и та же цена группы
Схема: итоговая цена складывается из базовой, цены группы и скидок; фильтр должен работать по той же цене, которую видит покупатель своей группы.

Несколько типов цен: розница и опт

В магазинах, которые работают и с розницей, и с оптом, у товара заведено несколько типов цен. Розничный покупатель должен фильтровать по розничной цене, оптовый — по оптовой, и границы бегунка у них будут разными. Это ещё одно проявление того, что цена персональна.

Как это устроено в связке «типы цен + фильтр»:

Типичные ловушки при нескольких типах цен:

Правильная логика: для каждой группы покупателей фильтр и ценник опираются на один и тот же тип цены. Организация цен по группам — отдельная большая тема, и мы разбирали её в статье про оптовые цены по группам; для фильтра важно, чтобы эти цены были заведены и включены в умный фильтр корректно. Если магазин строится как оптовый портал, эти вопросы решаются ещё на этапе разработки интернет-магазина на 1С-Битрикс.

Валюта и мультивалютность

Цена всегда привязана к валюте, и это важно для фильтра. В простом случае у магазина одна валюта — тогда фильтр по цене работает в ней, и никаких сложностей нет. Но встречаются ситуации сложнее:

Практический ориентир: держите единую валюту фильтрации, совпадающую с той, в которой покупатель видит цену. Мультивалютность в фильтре по цене — источник неочевидных расхождений, поэтому её закладывают осознанно и тестируют, что бегунок и ценник показывают согласованные числа. Для большинства магазинов достаточно одной базовой валюты каталога, и это самый надёжный вариант.

Важно: валюта фильтра, валюта отображения цены и валюта фасета должны быть согласованы. Самая частая «мистика» с фильтром по цене в мультивалютном каталоге — товар не попадает в диапазон, потому что его цена в фасете хранится в другой валюте, чем та, в которой покупатель задал границы. Приводите цены к единой валюте и пересобирайте фасет при смене курса.

Счётчики и предпросмотр количества

Хороший фильтр по цене показывает не только диапазон, но и сколько товаров попадёт под выбор. Это счётчики — числа рядом с готовыми диапазонами («до 10 000 — 42 товара») или динамическое количество, которое обновляется при движении бегунка. Счётчики резко улучшают UX: покупатель заранее понимает, стоит ли сужать диапазон дальше или он уже упрётся в пустоту.

Что важно про счётчики фильтра цены:

Счётчики особенно полезны для готовых ценовых диапазонов: они превращают набор пресетов в понятную карту ассортимента по бюджету. Для бегунка динамический счётчик количества помогает покупателю «нащупать» диапазон с товарами, не применяя фильтр вслепую. Реализуются счётчики механикой умного фильтра и фасета; без фасетного индекса корректные и быстрые счётчики не получить.

Пустые результаты и авто-подстройка

Отдельная больная точка — что происходит, когда под выбранный ценовой диапазон нет товаров. Плохой сценарий: покупатель тянет бегунок, применяет фильтр и видит пустую страницу «ничего не найдено» — тупик, из которого многие просто уходят.

Как проектируют поведение при пустом результате:

Ключевая идея — не давать покупателю попасть в пустоту, а если он туда попал, мягко вернуть его к результатам. Это обеспечивается связкой «фасетные счётчики + ограничение шкалы реальным диапазоном + пересчёт границ под текущую выборку». Всё это работает поверх фасетного индекса, поэтому корректная авто-подстножка диапазона — ещё один довод в пользу включённого и свежего фасета.

Производительность на большом каталоге

Фильтр по цене на каталоге в несколько тысяч товаров и фильтр на каталоге в сотни тысяч — это, с точки зрения производительности, разные задачи. На большом каталоге любая неаккуратность в настройке цены превращается в заметные задержки. Разберём, что влияет на скорость и как её держать.

Что ускоряет фильтр по цене:

Что замедляет фильтр по цене:

Отдельно про обмен с 1С: он меняет цены, а значит, после обмена фасет по цене должен пересобираться, иначе на большом каталоге фильтр либо отстанет от реальных цен, либо будет считать по устаревшему индексу. Пересборку фасета встраивают в регламент обмена. Общий принцип: на большом каталоге фильтр по цене должен полностью опираться на фасет и кэш, а любые «вычисления на лету» (скидки, курсы) вводят осознанно, понимая их влияние на скорость.

Без фасета: медленно С фасетом: быстро Запрос: цена 10 000–30 000 товар 1 товар 2 товар 3 … все N перебор каждого товара по цене нагрузка растёт с числом товаров Запрос: цена 10 000–30 000 интервал 10–30 000 готовый список товаров интервала скорость почти не зависит от размера на большом каталоге фильтр по цене держится на фасете и кэше
Схема: без фасета фильтр перебирает товары и замедляется с ростом каталога; с фасетом он берёт готовый интервал, поэтому скорость почти не зависит от размера каталога.

Мобильный фильтр цены

Больше половины трафика каталога — мобильный, а бегунок цены — один из самых неудобных для пальца элементов, если его не адаптировать. На узком экране маленькие ручки слайдера промахиваются, а фильтр, занимающий пол-экрана, мешает смотреть товары. Поэтому мобильный фильтр цены проектируют отдельно.

Что важно на мобильном:

Общий принцип мобильного фильтра цены — минимум точных жестов, максимум крупных элементов и явное подтверждение выбора. Для многих мобильных каталогов сочетание «крупные пресеты + поля ручного ввода» оказывается удобнее чистого бегунка, поэтому именно на мобильном готовые ценовые диапазоны особенно оправданы.

Другие числовые свойства кроме цены

Всё, что мы разобрали про цену как числовой фильтр, во многом переносится и на другие числовые характеристики: вес, объём, диагональ, мощность, длину, ширину, высоту. Их тоже фильтруют диапазоном «от–до» или бегунком, и они тоже опираются на фасет.

Отличия числовых свойств от цены:

Общие правила те же, что и для цены: свойство должно быть настоящим числом, а не строкой; диапазонный фильтр работает через фасет; интерфейс — поля «от–до» или бегунок; на большом каталоге нужен включённый фасетный индекс. Поэтому, освоив фильтр по цене, вы фактически умеете настраивать любой числовой фильтр — механика одна. Разница лишь в том, что цена сложнее из-за типов, скидок и валюты, а обычное числовое свойство ведёт себя проще.

АспектЦенаЧисловое свойство (вес, диагональ)
ИсточникТип цены торгового каталогаСвойство инфоблока типа «Число»
ПерсональностьРазная по группам и со скидкамиОдинакова для всех
Частота измененийВысокая (обмен, акции, курс)Низкая
Ловушка единицВалютаЕдиницы измерения
ИнтерфейсБегунок / диапазоныБегунок / поля «от–до»

Цена в фильтре и SEO

Ценовые запросы — большой пласт спроса: «смартфоны до 20000», «ноутбуки до 50 тысяч», «холодильники недорого». Правильно оформленный фильтр по цене умеет превращать этот спрос в трафик, а неправильный — плодит мусорные страницы и размывает индекс.

Что важно для SEO фильтра цены:

Логика простая: спрос на «до N» ловят предзаданными ценовыми диапазонами-страницами, а бесконечную свободу бегунка держат вне индекса. Это тот же принцип «ядро — страницами, хвост — под контролем», что и в фасетной навигации в целом. Как делают SEO-страницы фасета с чистыми URL и метатегами, подробно разобрано в статье про фасетную навигацию и SEO.

Пошагово: настраиваем фильтр по цене

Сведём всё в практическую последовательность — так мы настраиваем фильтр по цене на реальных проектах, от типов цен до приёмки.

  1. Навести порядок в типах цен. Проверить, что цена — это тип цены торгового каталога, а не строковое свойство инфоблока; что заведены нужные типы (розница, опт) с правильными правами доступа.
  2. Определить «цену истины». Решить, какую цену видит покупатель каждой группы и какую логично фильтровать: базовую, цену группы или итоговую со скидками.
  3. Включить цену в умный фильтр. В настройках bitrix:catalog.smart.filter отметить нужные типы цен, задать вид «бегунок» и, при необходимости, добавить пресеты диапазонов.
  4. Включить и собрать фасет. В настройках инфоблока включить фасетный индекс умного фильтра и пересобрать его, чтобы цена индексировалась диапазонно.
  5. Настроить шаг и округление. В шаблоне компонента задать шаг бегунка и логику округления границ под порядок цен каталога; проверить, что мин/макс шкалы «красивые».
  6. Согласовать фильтр с ценником. Убедиться, что диапазон фильтра совпадает с ценой, которую видит покупатель его группы, — с учётом скидок и типа цены.
  7. Добавить счётчики. Вывести количество товаров по диапазонам/при движении бегунка на основе фасета; погасить пустые варианты.
  8. Продумать пустой результат. Ограничить шкалу реальным диапазоном, настроить понятное состояние «ничего не найдено» и авто-подстройку границ.
  9. Адаптировать под мобильный. Фильтр в шторку, крупные ручки и поля ввода, кнопки-пресеты, применение по кнопке «Показать».
  10. Настроить SEO. Ходовые ценовые диапазоны оформить посадочными страницами; произвольный бегунок держать вне индекса; закрыть дубли каноническими адресами.
  11. Встроить пересборку фасета в обмен. После обмена с 1С (смена цен) фасет по цене должен пересобираться автоматически.
  12. Проверить под нагрузкой и под группами. Протестировать скорость на объёме каталога и совпадение фильтра с ценником под розницей и оптом.

Реализация: catalog.smart.filter и фасет

Соберём в одном месте, какими штатными средствами Битрикса реализуется всё описанное, — чтобы было понятно, что где настраивается.

ЗадачаИнструмент 1С-Битрикс
Цена товара (розница, опт)Типы цен модуля торгового каталога + права доступа
Вывод фильтра по ценеКомпонент bitrix:catalog.smart.filter
Бегунок, шаг, округлениеШаблон компонента catalog.smart.filter (вёрстка + JS слайдера)
Быстрый поиск по диапазонуФасетный индекс умного фильтра (настройки инфоблока)
Итоговая цена со скидкамиПравила работы с ценой / скидки торгового каталога
Числовые свойства (вес, диагональ)Свойства инфоблока типа «Число» в умном фильтре
Счётчики количестваМеханика умного фильтра поверх фасета
SEO-страницы «до N»SEO-страницы умного фильтра + ЧПУ и метатеги
Актуальность цен в фильтреОбмен с 1С + пересборка фасета после обмена
Скорость вывода фильтраКэш компонента, управляемый кэш

Ключевая связка выглядит так: тип цены торгового каталога даёт корректное числовое значение с учётом группы и скидок; фасетный индекс хранит это значение диапазонно и делает поиск по интервалу быстрым; компонент bitrix:catalog.smart.filter выводит фильтр и обрабатывает выбранные границы; его шаблон отвечает за вид бегунка, шаг, округление, счётчики и мобильную адаптацию. Настройки распределены по трём местам: типы цен и скидки — в торговом каталоге; фасетный индекс — в настройках инфоблока; вид и включённые источники фильтра — в параметрах и шаблоне компонента.

Отдельно про кастомизацию: чтобы поменять поведение бегунка (шаг, округление, применение по кнопке, вид счётчиков, мобильную шторку), копируют шаблон компонента умного фильтра в шаблон сайта и правят его вёрстку и JS. Логику получения границ из фасета и обработку типов цен трогают редко — их обеспечивает сам компонент. Так весь фильтр по цене собирается штатными средствами, а задача разработчика — правильно навести порядок в ценах, включить фасет и аккуратно настроить шаблон.

Частые ошибки

Мини-FAQ. Почему товар с ценником «9 900» не находится в диапазоне «до 10 000»? Почти всегда потому, что фильтр ищет по базовой цене (например, «11 000»), а «9 900» — это цена со скидкой из карточки. Согласуйте фильтруемую цену с той, что видит покупатель, и пересоберите фасет.

Чек-лист по фильтру цены

Сведём в практический список то, что проверяют при настройке и приёмке фильтра по цене перед запуском.

  1. Цена — это тип цены, не строка. Фильтр опирается на тип цены торгового каталога, а не на строковое свойство инфоблока.
  2. Фильтр совпадает с ценником. Диапазон фильтра построен на той же цене, что видит покупатель (с учётом скидок и группы).
  3. Типы цен разведены. Розница и опт заведены с правами доступа; нужные типы включены в умный фильтр; каждая группа фильтрует по своей цене.
  4. Фасет включён и свеж. Фасетный индекс по цене собран; пересборка встроена в обмен с 1С и запуск акций.
  5. Бегунок аккуратен. Шаг и округление заданы под порядок цен; мин/макс шкалы «красивые» и берутся из реального диапазона.
  6. Пресеты и SEO. Ходовые диапазоны оформлены как посадочные страницы «до N»; произвольный бегунок вне индекса; дубли закрыты канониклом.
  7. Счётчики работают. Количество по диапазонам считается на фасете, учитывает другие фильтры, пустые варианты погашены, вывод кэширован.
  8. Пустой результат не тупик. Шкала ограничена реальным диапазоном; есть понятное «ничего не найдено» и сброс; границы авто-подстраиваются.
  9. Валюта согласована. Валюта фильтра, отображения и фасета совпадают; при мультивалютности цены приведены к единой валюте.
  10. Мобильный удобен. Фильтр в шторке, крупные ручки, поля ввода, кнопки-пресеты, применение по кнопке «Показать».
  11. Скорость проверена. Фильтр протестирован на объёме каталога и держится на фасете и кэше, а не на вычислениях на лету.

Вывод

Фильтр по цене выглядит как простой бегунок, но за ним стоит целая инженерия: цена — это не строка, а тип цены торгового каталога; она подвижна и персональна, поэтому фильтруемую цену согласуют с той, что видит покупатель его группы, с учётом скидок и акций; числовой фильтр работает быстро только на фасетном индексе, где цена хранится диапазонно; шаг и округление делают числа «красивыми», а готовые диапазоны и бегунок дополняют друг друга и ловят ценовой спрос под SEO. Ошибётесь в любом из этих слоёв — и получите либо расхождение «фильтр ≠ ценник», либо тормоза на большом каталоге, либо пустые результаты, из которых покупатель уходит.

Практический вывод один: фильтр по цене настраивают через штатный механизм типов цен и умного фильтра, а не через строковые свойства; опирают на включённый и свежий фасет; согласуют с ценником и группой покупателя; аккуратно оформляют бегунок, пресеты и мобильную версию. Сделайте это правильно — и покупатель за секунду сузит каталог по своему бюджету, а витрина не задумается ни на большом каталоге, ни при опте, ни при акции. А если фильтр по цене нужно настроить с нуля или починить расхождения со скидками и типами цен, мы помогаем с этим в рамках разработки каталога товаров на 1С-Битрикс и создания интернет-магазина на 1С-Битрикс. Больше разборов по теме — в рубрике «Каталог и поиск».

Частые вопросы

Что такое фильтр по цене в 1С-Битрикс простыми словами?

Фильтр по цене — это элемент умного фильтра каталога, который позволяет покупателю отсечь товары дороже или дешевле заданной суммы. Обычно он выглядит как бегунок (slider) с двумя ручками «от» и «до» либо как набор готовых ценовых диапазонов-чекбоксов. Технически цена — это не обычное свойство инфоблока, а числовое значение из модуля торгового каталога (тип цены), поэтому Битрикс обрабатывает её особым образом: строит по ней фасетный индекс, учитывает скидки и группу покупателя и умеет искать по числовому диапазону быстро, без перебора всех товаров. За вывод бегунка и обработку диапазона отвечает штатный компонент bitrix:catalog.smart.filter.

Чем бегунок цены отличается от готовых диапазонов?

Бегунок (slider) даёт покупателю плавно задать любые границы «от» и «до» в пределах минимальной и максимальной цены каталога — это гибко и привычно, особенно на широком диапазоне цен. Готовые диапазоны — это заранее заданные интервалы (например, «до 10 000», «10 000–30 000», «свыше 30 000») в виде чекбоксов или ссылок: они проще для быстрого выбора, лучше индексируются как отдельные страницы под запросы «цена до N» и защищают от абсурдных границ. На практике их часто совмещают: бегунок как основной инструмент плюс несколько кнопок-пресетов. Выбор зависит от каталога: для однородного ассортимента с узким разбросом цен хватает диапазонов, для широкого — нужен бегунок.

Какая именно цена участвует в фильтре — с учётом скидок или без?

Это ключевой вопрос, который решают на этапе настройки. В умном фильтре по цене фильтруется значение выбранного типа цены с учётом того, что настроено в проекте: базовая цена, цена конкретной группы покупателей или итоговая цена со скидками и правилами работы с ценой. Если магазин показывает покупателю цену со скидкой, а фильтр при этом ищет по базовой цене, покупатель увидит расхождение: товар с ценником «9 900» не попадёт в диапазон «до 10 000». Поэтому фильтруемую цену согласовывают с той, что видит покупатель в карточке. Учёт скидок в фасете имеет цену производительности, поэтому его закладывают осознанно.

Как фильтр по цене работает при нескольких типах цен (розница и опт)?

Когда в каталоге заведено несколько типов цен (розничная, оптовая, для дилеров), каждая группа покупателей видит свой тип по правам доступа к ценам. Умный фильтр по цене строится вокруг типов цен, попадающих в фасет: для каждого типа цены, участвующего в фильтрации, Битрикс хранит в фасетном индексе свой диапазон. Розничный покупатель фильтрует по розничной цене, оптовый — по оптовой, и границы бегунка у них разные. Важно, чтобы типы цен, которые вы хотите фильтровать, были включены в настройках умного фильтра и попали в фасетный индекс, иначе фильтр по нужной цене просто не появится или будет пустым.

Почему фильтр по цене возвращает пустой результат или «съедает» товары?

Частые причины две. Первая — цена хранится как строковое свойство инфоблока, а не как цена торгового каталога: тогда сортировка и сравнение идут как со строками, «100» оказывается «больше» «99 000», а диапазоны считаются неверно. Вторая — рассинхрон фасетного индекса: цены изменились (обмен с 1С, пересчёт скидок), а фасет не пересобрали, поэтому фильтр опирается на устаревшие границы и часть товаров выпадает. Ещё встречается несоответствие фильтруемой и отображаемой цены (фильтр по базовой, показ со скидкой) и товары без цены выбранного типа, которые не попадают ни в один диапазон. Лечится корректным типом цены, пересборкой фасета и согласованием цены.

Как настроить шаг и округление бегунка цены?

Шаг бегунка — это на сколько меняется значение при перетаскивании ручки. Слишком мелкий шаг (по рублю) даёт «дёрганые» некрасивые числа и лишние варианты URL для SEO, слишком крупный — не даёт задать нужную границу. Разумный подход — задавать шаг и округление границ пропорционально порядку цен в каталоге: для дешёвых товаров шаг меньше, для дорогих — крупнее, а введённые вручную границы округлять до «круглых» значений. Технически поведение бегунка задаётся в шаблоне компонента умного фильтра (параметры слайдера и логика округления в его JS), а «красивые» минимум и максимум берутся из фактического диапазона цен каталога, часто с округлением вниз/вверх до удобного значения.

Замедляет ли фильтр по цене каталог и как это контролировать?

Сам по себе фильтр по числовому диапазону — быстрый, если он опирается на фасетный индекс: Битрикс не перебирает все товары, а обращается к заранее посчитанной таблице фасета. Проседание скорости возникает, когда фасет отключён или не пересобран, когда цена учитывает скидки и правила в реальном времени (тогда часть расчёта уходит из индекса в вычисления на лету) и когда счётчики количества по каждому диапазону считаются без кэша. Контролируют это так: включают и регулярно пересобирают фасетный индекс, кэшируют вывод умного фильтра, аккуратно решают, учитывать ли скидки в фасете, и следят, чтобы обмен с 1С пересобирал фасет после изменения цен.

Каким компонентом реализуется фильтр по цене и где он настраивается?

Фильтр по цене реализует штатный компонент bitrix:catalog.smart.filter — тот же, что отвечает за весь умный фильтр каталога. В его настройках выбирают, какие типы цен и числовые свойства показывать в фильтре, включают отображение цены как бегунка, задают округление границ и подключают фасетный режим. Сам фасетный индекс включается и пересобирается в настройках инфоблока каталога (раздел про фасетный индекс умного фильтра). Вид бегунка, шаг, поведение ручек и счётчики настраиваются в шаблоне компонента, скопированном в шаблон сайта. То есть цена в фильтре — это связка «тип цены торгового каталога + фасетный индекс + компонент smart.filter + его шаблон».

Поделиться:

Фильтр по цене не совпадает с ценником или тормозит каталог?

Настроим фильтр по цене так, чтобы бегунок и готовые диапазоны совпадали с ценой в карточке для розницы и опта, учитывали скидки и группу покупателя, работали на фасетном индексе и держали скорость на большом каталоге. Разберём типы цен, скидки, обмен с 1С и SEO ценовых страниц. Рассчитаем стоимость по вашему проекту.

Услуга «Каталог товаров»

Игорь Воскресенский

Основатель студии B2Bsite. С 2014 года команда разрабатывает и поддерживает интернет-магазины и корпоративные сайты на 1С-Битрикс, настраивает умный фильтр и фильтр по цене, типы цен для розницы и опта, фасетный индекс и обмен с 1С для среднего и крупного бизнеса.

← Все статьи блога