Фильтр по цене — самый нажимаемый элемент любого каталога. Покупатель ещё не выбрал бренд и характеристики, но уже отсекает то, что ему не по карману: тянет бегунок или ставит галочку «до 10 000». Если этот фильтр работает точно и быстро — человек за секунду сужает выдачу до товаров в своём бюджете. Если же цена в фильтре не совпадает с ценником в карточке, бегунок «дёргается» на странных числах, а на большом каталоге страница задумывается на пару секунд — покупатель раздражается и уходит, а вы теряете заказ на ровном месте.
В этой статье разберём фильтр по цене в 1С-Битрикс без общих слов: чем цена отличается от обычного числового свойства и почему её обрабатывают особо, как устроен и настраивается бегунок цены (slider), когда выгоднее готовые ценовые диапазоны, а когда плавный ползунок, как задавать шаги и округление, как числовой фильтр хранит цену в фасете через диапазоны, какая именно цена попадает под фильтр с учётом скидок, акций и группы клиента, что делать при нескольких типах цен (розница и опт), как быть с валютой, счётчиками и пустыми результатами и как удержать скорость на большом каталоге. Материал — выжимка из наших внедрений по разработке каталога товаров на 1С-Битрикс, где фильтр по цене настраивается так, чтобы совпадать с ценником и не тормозить витрину.
Коротко
- Цена в фильтре — это не строковое свойство, а числовое значение типа цены из торгового каталога; фильтровать её строкой — грубая ошибка.
- Бегунок цены даёт плавно задать «от» и «до»; готовые диапазоны проще для быстрого выбора и лучше индексируются — их часто совмещают.
- Шаги и округление бегунка задают под порядок цен каталога, а минимум/максимум берут из реального диапазона цен.
- Числовой фильтр опирается на фасетный индекс: цена хранится диапазонно, поэтому поиск по интервалу быстрый и без перебора товаров.
- Фильтруемую цену согласуют с той, что видит покупатель: с учётом скидок, акций и группы клиента, иначе ценник и диапазон разойдутся.
- При нескольких типах цен (розница/опт) каждая группа фильтрует по своей цене; фасет пересобирают после изменения цен и обмена с 1С.
Чем фильтр по цене отличается от обычного
На первый взгляд цена — это просто число, и фильтр по ней ничем не отличается от фильтра по объёму памяти или диагонали. На практике цена — особый случай, и понимать это отличие важно, потому что из него вытекают почти все тонкости настройки.
Во-первых, цена в 1С-Битрикс — это не свойство инфоблока, а сущность модуля торгового каталога. У товара может быть несколько цен разных типов (розница, опт, для дилеров), они хранятся в отдельных таблицах, привязаны к валюте и к правам доступа. Умный фильтр знает про эту специфику и умеет работать с типами цен как с числовым источником для фасета.
Во-вторых, цена подвижна. Обычное свойство (цвет, материал) меняется редко, а цена пересчитывается при каждом обмене с 1С, при запуске акции, при смене курса валюты. Значит, границы фильтра и фасетный индекс по цене должны переобновляться чаще, чем по статичным свойствам.
В-третьих, цена персональна. Один и тот же товар для розничного покупателя стоит одно, для оптовика — другое, а со скидкой по акции — третье. Поэтому вопрос «какую именно цену фильтруем» не праздный: от ответа зависит, совпадёт ли фильтр с ценником, который видит конкретный покупатель.
Из-за этих трёх свойств — «цена из торгового каталога», «цена подвижна», «цена персональна» — фильтр по цене требует отдельного внимания при настройке, хотя визуально это всего лишь бегунок. Сам механизм умного фильтра, в который встроена цена, мы подробно разбирали в статье про умный фильтр в 1С-Битрикс; здесь фокус именно на цене и числовых диапазонах.
Числовые свойства и цена в умном фильтре
Умный фильтр каталога умеет работать с двумя видами числовых источников, и их важно не путать, потому что настраиваются они по-разному.
Числовые свойства инфоблока
Это обычные свойства товара с типом «Число»: вес, объём, диагональ, мощность, длина. Для таких свойств умный фильтр умеет показывать диапазонный интерфейс — два поля «от» и «до» или бегунок. Ключевое условие — свойство должно иметь именно числовой тип, а не строковый. Тогда сравнение и сортировка идут по числу, а не по тексту, и фасет строит по свойству корректный диапазон.
Цена как источник фильтра
Цена — это не свойство инфоблока, а значение типа цены из торгового каталога. В настройках умного фильтра типы цен выводятся отдельным блоком, наряду со свойствами: вы выбираете, какие типы цен показывать в фильтре и в каком виде. Внешне для покупателя это выглядит так же, как числовой фильтр (бегунок «от–до»), но внутри Битрикс берёт значение не из свойства, а из таблицы цен, учитывая права доступа к типу цены и настройки скидок.
Практический вывод: когда вы «добавляете фильтр по цене», вы включаете в умном фильтре нужный тип цены, а не создаёте числовое свойство «Цена». Ошибка, когда цену заводят отдельным строковым или числовым свойством инфоблока и фильтруют по нему, — одна из самых частых и самых болезненных; о ней подробно в разделе про частые ошибки. Правильно — использовать штатный механизм типов цен торгового каталога.
| Источник фильтра | Что это | Как включить в фильтре |
|---|---|---|
| Числовое свойство | Свойство инфоблока типа «Число» (вес, диагональ) | Отметить свойство в настройках умного фильтра, задать вид «диапазон/бегунок» |
| Тип цены | Цена товара из торгового каталога (розница, опт) | Отметить нужный тип цены в блоке цен настроек умного фильтра |
| Строковое свойство с числом | Антипаттерн: число хранится как текст | Так делать нельзя — диапазон и сортировка сломаются |
Бегунок (slider) цены и его настройка
Бегунок цены — привычный покупателю интерфейс: горизонтальная шкала с двумя ручками «от» и «до» и обычно с полями ручного ввода границ. Он удобен именно для цены, потому что разброс цен часто большой, а покупатель хочет задать свой бюджет плавно, а не выбирать из фиксированных интервалов.
Из чего складывается работа бегунка:
- Минимум и максимум. Крайние точки шкалы — это самая дешёвая и самая дорогая цена среди товаров текущей выборки (раздела или уже отфильтрованного набора). Их Битрикс берёт из фасетного индекса, поэтому шкала всегда охватывает реальный диапазон цен.
- Ручки «от» и «до». Перетаскивая их, покупатель задаёт нижнюю и верхнюю границу. Значения синхронизируются с полями ручного ввода: можно и тянуть, и вписать число руками.
- Шаг. На сколько меняется значение при перетаскивании. От шага зависит, будут ли числа «круглыми» и сколько промежуточных значений возможно.
- Применение фильтра. После выбора границ фильтр либо применяется сразу (авто-обновление выдачи), либо по кнопке «Показать». Для больших каталогов кнопка часто предпочтительнее — она не пересчитывает выдачу на каждое микродвижение ручки.
Технически бегунок — это часть шаблона компонента умного фильтра. Штатный шаблон умного фильтра уже содержит слайдер цены на JavaScript; его вид, шаг, поведение ручек и способ применения настраивают, копируя шаблон компонента bitrix:catalog.smart.filter в шаблон сайта и правя вёрстку и скрипт. Логику получения границ (мин/макс из фасета) при этом обычно не трогают — её обеспечивает сам компонент.
Важная деталь UX: бегунок должен сужаться вместе с выдачей. Если покупатель уже выбрал бренд и осталось три товара, шкала цены в идеале показывает диапазон именно этих трёх, а не всего каталога. Это поведение обеспечивает фасетный режим фильтра — он пересчитывает доступные границы под текущую комбинацию условий.
Готовые диапазоны или плавный бегунок
Есть два принципиально разных способа дать покупателю фильтровать по цене: плавный бегунок и набор готовых ценовых диапазонов (пресетов) в виде чекбоксов или ссылок. У каждого свои сильные стороны, и выбор — это проектное решение под конкретный каталог.
Плавный бегунок
Ползунок «от–до» хорош, когда разброс цен большой, а покупатели задают самые разные бюджеты. Он гибок: можно задать любую границу. Минусы — он требует осознанного действия (подумать, куда тянуть), хуже работает как отдельная SEO-страница и на неудачной настройке даёт «некрасивые» числа.
Готовые диапазоны
Пресеты вроде «до 10 000», «10 000–30 000», «свыше 30 000» — это заранее заданные интервалы. Их плюсы: быстрый выбор в один клик, понятные «круглые» границы, защита от абсурдных значений и, главное, возможность сделать из каждого диапазона отдельную посадочную страницу под запрос «товар до N рублей». Минусы — жёсткость: покупатель ограничен теми интервалами, что вы задали.
| Критерий | Плавный бегунок | Готовые диапазоны |
|---|---|---|
| Гибкость границ | Любые значения «от–до» | Только заданные интервалы |
| Скорость выбора | Нужно подумать и потянуть | Один клик по пресету |
| SEO-страницы | Плохо: параметрический URL | Хорошо: отдельные страницы «до N» |
| «Красивые» числа | Зависит от шага и округления | Всегда круглые по определению |
| Широкий разброс цен | Работает отлично | Нужно много интервалов |
| Узкий однородный каталог | Избыточен | Достаточно 3–4 пресетов |
На практике эти способы не конкурируют, а дополняют друг друга. Частое хорошее решение — основной бегунок цены плюс несколько кнопок-пресетов над ним для самых ходовых бюджетов. Тогда покупатель, который хочет быстро, жмёт пресет, а тот, кому нужна точность, тянет ползунок. А для SEO ходовые ценовые диапазоны оформляют как посадочные страницы фильтра — эту технику мы разбирали в статье про фасетную навигацию и 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-применение — в материале о фасетной навигации.
Какая цена фильтруется: скидки и группа клиента
Это, пожалуй, самый важный и самый недооценённый вопрос настройки. Товар может иметь базовую цену, цену конкретной группы покупателей и итоговую цену со скидками и акциями. Вопрос — по какой из них работает фильтр — определяет, совпадёт ли бегунок с ценником в карточке.
Разберём слои цены, из которых складывается то, что видит покупатель:
- Базовая цена. «Исходная» цена типа, заведённая в каталоге или пришедшая из 1С.
- Цена группы покупателей. Разные группы (розница, опт, дилеры) видят разные типы цен по правам доступа к ценам.
- Скидки и правила работы с ценой. Акции, скидки на группу товаров, персональные условия могут менять итоговую цену на лету.
- Итоговая цена в карточке. То число, которое реально видит покупатель после всех пересчётов.
Опасность в том, что фильтр и ценник могут опираться на разные слои. Классический сбой: карточка показывает цену со скидкой «9 900», а умный фильтр настроен на базовую цену «11 000», поэтому по запросу «до 10 000» этот товар не покажется, хотя на витрине он стоит меньше 10 000. Покупатель видит расхождение и теряет доверие к фильтру.
Как это решают:
- Определяют «цену истины». Решают, какую цену видит покупатель на витрине и какую логично фильтровать: базовую, цену группы или итоговую со скидками.
- Согласуют фильтр с ценником. Настраивают умный фильтр так, чтобы он фильтровал по той же цене, что отображается покупателю его группы.
- Взвешивают учёт скидок в фасете. Учёт динамических скидок в фильтре точнее для покупателя, но тяжелее для производительности (часть расчёта уходит из статичного индекса). Это компромисс, который принимают осознанно.
- Проверяют на реальных группах. Тестируют под разными группами покупателей: совпадает ли диапазон фильтра с тем, что каждая группа видит в карточке.
Отдельно про группу клиента. Поскольку цена персональна, «правильная» цена для фильтра зависит от того, кто фильтрует. Розничный покупатель должен фильтровать по рознице, оптовый — по опту. Это работает, если типы цен и права доступа настроены корректно и нужные типы включены в умный фильтр. Тему цен по группам мы подробно разбирали в статье про оптовые цены по группам в 1С-Битрикс — она напрямую связана с тем, какая цена попадёт в фильтр.
Несколько типов цен: розница и опт
В магазинах, которые работают и с розницей, и с оптом, у товара заведено несколько типов цен. Розничный покупатель должен фильтровать по розничной цене, оптовый — по оптовой, и границы бегунка у них будут разными. Это ещё одно проявление того, что цена персональна.
Как это устроено в связке «типы цен + фильтр»:
- Типы цен и права доступа. Каждый тип цены (розница, опт, дилер) имеет права: какая группа покупателей его видит. Это базовая настройка торгового каталога.
- Включение типов в фильтр. В умном фильтре отмечают, какие типы цен участвуют в фильтрации. Только включённые типы попадают в фасет и появляются как фильтр.
- Фасет по каждому типу. Для каждого фильтруемого типа цены Битрикс хранит в фасетном индексе свой диапазон, поэтому мин/макс бегунка у розницы и опта разные.
- Отображение под группой. Покупатель видит фильтр по тому типу цены, который ему доступен; чужой тип цены ему не показывается.
Типичные ловушки при нескольких типах цен:
- Нужный тип не включён в фильтр. Если оптовую цену не отметили в настройках умного фильтра, оптовик не сможет фильтровать по опту — фильтр либо пуст, либо показывает не ту цену.
- Товары без цены нужного типа. Если у части товаров не заведена оптовая цена, они выпадают из оптового фильтра — это нужно контролировать при обмене.
- Смешение типов. Настройка, при которой фильтр показывает розницу, а карточка под оптовиком — опт, создаёт то же расхождение «фильтр ≠ ценник», что и со скидками.
Правильная логика: для каждой группы покупателей фильтр и ценник опираются на один и тот же тип цены. Организация цен по группам — отдельная большая тема, и мы разбирали её в статье про оптовые цены по группам; для фильтра важно, чтобы эти цены были заведены и включены в умный фильтр корректно. Если магазин строится как оптовый портал, эти вопросы решаются ещё на этапе разработки интернет-магазина на 1С-Битрикс.
Валюта и мультивалютность
Цена всегда привязана к валюте, и это важно для фильтра. В простом случае у магазина одна валюта — тогда фильтр по цене работает в ней, и никаких сложностей нет. Но встречаются ситуации сложнее:
- Цены в разных валютах. Часть товаров может быть заведена в одной валюте, часть — в другой (например, импорт в валюте поставщика). Тогда для корректного сравнения по единой шкале цены приводят к базовой валюте по курсу.
- Отображение в валюте покупателя. Если витрина показывает цены в валюте пользователя, важно, чтобы фильтр работал в той же валюте, что и отображение, иначе границы бегунка и ценники разойдутся.
- Пересчёт по курсу и фасет. Когда цена в фасете хранится в одной валюте, а курс изменился, границы фильтра нужно пересчитывать и пересобирать фасет — иначе диапазоны «отстанут» от актуальных цен.
Практический ориентир: держите единую валюту фильтрации, совпадающую с той, в которой покупатель видит цену. Мультивалютность в фильтре по цене — источник неочевидных расхождений, поэтому её закладывают осознанно и тестируют, что бегунок и ценник показывают согласованные числа. Для большинства магазинов достаточно одной базовой валюты каталога, и это самый надёжный вариант.
Счётчики и предпросмотр количества
Хороший фильтр по цене показывает не только диапазон, но и сколько товаров попадёт под выбор. Это счётчики — числа рядом с готовыми диапазонами («до 10 000 — 42 товара») или динамическое количество, которое обновляется при движении бегунка. Счётчики резко улучшают UX: покупатель заранее понимает, стоит ли сужать диапазон дальше или он уже упрётся в пустоту.
Что важно про счётчики фильтра цены:
- Считаются по фасету. Как и сам фильтр, счётчики опираются на фасетный индекс — иначе пересчёт количества по каждому диапазону лёг бы тяжёлой нагрузкой на базу.
- Учитывают уже выбранные фильтры. Хороший счётчик показывает количество с учётом других активных условий (бренд, наличие), а не по всему разделу. Это фасетная механика «доступных значений».
- Показывают недоступные варианты аккуратно. Диапазоны с нулём товаров под текущим набором фильтров либо скрывают, либо гасят, чтобы покупатель не выбирал заведомо пустое.
- Требуют кэша. Счётчики читаются на каждый показ фильтра, поэтому их вывод кэшируют вместе с умным фильтром.
Счётчики особенно полезны для готовых ценовых диапазонов: они превращают набор пресетов в понятную карту ассортимента по бюджету. Для бегунка динамический счётчик количества помогает покупателю «нащупать» диапазон с товарами, не применяя фильтр вслепую. Реализуются счётчики механикой умного фильтра и фасета; без фасетного индекса корректные и быстрые счётчики не получить.
Пустые результаты и авто-подстройка
Отдельная больная точка — что происходит, когда под выбранный ценовой диапазон нет товаров. Плохой сценарий: покупатель тянет бегунок, применяет фильтр и видит пустую страницу «ничего не найдено» — тупик, из которого многие просто уходят.
Как проектируют поведение при пустом результате:
- Ограничение бегунка реальным диапазоном. Если шкала охватывает только фактические мин/макс выборки, покупатель физически не может задать заведомо пустой диапазон за пределами цен каталога.
- Счётчики до применения. Динамическое количество при движении ручки показывает, что впереди пусто, ещё до нажатия «Показать».
- Гашение пустых пресетов. Готовые диапазоны без товаров под текущим набором фильтров гасят или скрывают.
- Понятное состояние «ничего не найдено». Если пусто всё же случилось — вместо тупика показывают подсказку «расширьте диапазон цены» и кнопку сброса ценового фильтра.
- Авто-подстройка границ. После применения других фильтров границы бегунка пересчитывают под оставшуюся выборку, чтобы шкала не оставалась «широкой», когда товаров осталось мало.
Ключевая идея — не давать покупателю попасть в пустоту, а если он туда попал, мягко вернуть его к результатам. Это обеспечивается связкой «фасетные счётчики + ограничение шкалы реальным диапазоном + пересчёт границ под текущую выборку». Всё это работает поверх фасетного индекса, поэтому корректная авто-подстножка диапазона — ещё один довод в пользу включённого и свежего фасета.
Производительность на большом каталоге
Фильтр по цене на каталоге в несколько тысяч товаров и фильтр на каталоге в сотни тысяч — это, с точки зрения производительности, разные задачи. На большом каталоге любая неаккуратность в настройке цены превращается в заметные задержки. Разберём, что влияет на скорость и как её держать.
Что ускоряет фильтр по цене:
- Включённый фасетный индекс. Главный фактор. С фасетом числовой фильтр не перебирает товары, а обращается к предпосчитанным диапазонам. Без фасета фильтр по цене на большом каталоге считается медленно.
- Кэширование умного фильтра. Вывод фильтра и счётчиков кэшируют, чтобы не пересобирать их на каждом хите.
- Свежесть фасета. Регулярная пересборка фасета после изменения цен — иначе фильтр либо ошибается, либо в частичном режиме считает на лету.
- Применение по кнопке. На больших каталогах фильтр применяют по кнопке «Показать», а не на каждое микродвижение ручки, чтобы не гонять пересчёт постоянно.
Что замедляет фильтр по цене:
- Отключённый или несобранный фасет. Тогда фильтр уходит в прямые запросы по таблице цен — на большом каталоге это тяжело.
- Скидки и правила в реальном времени. Учёт динамических скидок точнее, но часть расчёта уходит из статичного индекса в вычисления на лету — это цена за точность.
- Счётчики без кэша. Пересчёт количества по каждому диапазону на каждый показ фильтра нагружает базу.
- Строковая цена. Если цена хранится строкой, диапазонный поиск идёт неоптимально и без нормального фасета.
Отдельно про обмен с 1С: он меняет цены, а значит, после обмена фасет по цене должен пересобираться, иначе на большом каталоге фильтр либо отстанет от реальных цен, либо будет считать по устаревшему индексу. Пересборку фасета встраивают в регламент обмена. Общий принцип: на большом каталоге фильтр по цене должен полностью опираться на фасет и кэш, а любые «вычисления на лету» (скидки, курсы) вводят осознанно, понимая их влияние на скорость.
Мобильный фильтр цены
Больше половины трафика каталога — мобильный, а бегунок цены — один из самых неудобных для пальца элементов, если его не адаптировать. На узком экране маленькие ручки слайдера промахиваются, а фильтр, занимающий пол-экрана, мешает смотреть товары. Поэтому мобильный фильтр цены проектируют отдельно.
Что важно на мобильном:
- Фильтр в шторке. На мобильном фильтр по цене обычно прячут в выезжающую панель (bottom sheet) по кнопке «Фильтр», а не держат постоянно на экране.
- Крупные ручки и зоны нажатия. Ручки бегунка делают достаточно крупными, а зону касания — шире визуального элемента, чтобы палец попадал.
- Поля ручного ввода. Рядом с бегунком оставляют поля «от» и «до» с числовой клавиатурой — часто ввести число быстрее, чем целиться ручкой.
- Готовые пресеты как кнопки. На мобильном крупные кнопки-пресеты «до 10 000», «до 30 000» часто удобнее слайдера — один тап вместо точного перетаскивания.
- Применение по кнопке. На мобильном особенно важно применять фильтр по явной кнопке «Показать N товаров», а не на каждое движение — так экономится трафик и не дёргается выдача.
Общий принцип мобильного фильтра цены — минимум точных жестов, максимум крупных элементов и явное подтверждение выбора. Для многих мобильных каталогов сочетание «крупные пресеты + поля ручного ввода» оказывается удобнее чистого бегунка, поэтому именно на мобильном готовые ценовые диапазоны особенно оправданы.
Другие числовые свойства кроме цены
Всё, что мы разобрали про цену как числовой фильтр, во многом переносится и на другие числовые характеристики: вес, объём, диагональ, мощность, длину, ширину, высоту. Их тоже фильтруют диапазоном «от–до» или бегунком, и они тоже опираются на фасет.
Отличия числовых свойств от цены:
- Источник — свойство, не тип цены. Для веса или диагонали создают свойство инфоблока типа «Число» и включают его в умный фильтр как числовой диапазон.
- Не персональны. Вес одинаков для всех групп покупателей — нет слоёв «базовая/группа/скидка», как у цены. Это проще.
- Меняются реже. Характеристики товара статичнее цены, поэтому фасет по ним пересобирается не так часто.
- Единицы измерения. Для числовых свойств важно единообразие единиц: если часть товаров в граммах, часть в килограммах — диапазон сломается так же, как валюта у цены.
Общие правила те же, что и для цены: свойство должно быть настоящим числом, а не строкой; диапазонный фильтр работает через фасет; интерфейс — поля «от–до» или бегунок; на большом каталоге нужен включённый фасетный индекс. Поэтому, освоив фильтр по цене, вы фактически умеете настраивать любой числовой фильтр — механика одна. Разница лишь в том, что цена сложнее из-за типов, скидок и валюты, а обычное числовое свойство ведёт себя проще.
| Аспект | Цена | Числовое свойство (вес, диагональ) |
|---|---|---|
| Источник | Тип цены торгового каталога | Свойство инфоблока типа «Число» |
| Персональность | Разная по группам и со скидками | Одинакова для всех |
| Частота изменений | Высокая (обмен, акции, курс) | Низкая |
| Ловушка единиц | Валюта | Единицы измерения |
| Интерфейс | Бегунок / диапазоны | Бегунок / поля «от–до» |
Цена в фильтре и SEO
Ценовые запросы — большой пласт спроса: «смартфоны до 20000», «ноутбуки до 50 тысяч», «холодильники недорого». Правильно оформленный фильтр по цене умеет превращать этот спрос в трафик, а неправильный — плодит мусорные страницы и размывает индекс.
Что важно для SEO фильтра цены:
- Готовые диапазоны — под посадочные страницы. Ходовые запросы «до N» оформляют как SEO-страницы фильтра с человекочитаемым URL, уникальным Title/Description и текстом — тогда они ранжируются.
- Бегунок — как правило, вне индекса. Произвольные границы бегунка дают бесконечные параметрические URL; их обычно не индексируют, оставляя в индексе только осмысленные пресеты.
- Округление против дублей. Единая логика округления границ не даёт плодить почти одинаковые ценовые URL («до 9 900» и «до 10 000» как разные страницы).
- Канонические адреса. Параметрические комбинации фильтра цены с другими условиями закрывают каноническими адресами, чтобы не размывать вес.
Логика простая: спрос на «до N» ловят предзаданными ценовыми диапазонами-страницами, а бесконечную свободу бегунка держат вне индекса. Это тот же принцип «ядро — страницами, хвост — под контролем», что и в фасетной навигации в целом. Как делают SEO-страницы фасета с чистыми URL и метатегами, подробно разобрано в статье про фасетную навигацию и SEO.
Пошагово: настраиваем фильтр по цене
Сведём всё в практическую последовательность — так мы настраиваем фильтр по цене на реальных проектах, от типов цен до приёмки.
- Навести порядок в типах цен. Проверить, что цена — это тип цены торгового каталога, а не строковое свойство инфоблока; что заведены нужные типы (розница, опт) с правильными правами доступа.
- Определить «цену истины». Решить, какую цену видит покупатель каждой группы и какую логично фильтровать: базовую, цену группы или итоговую со скидками.
- Включить цену в умный фильтр. В настройках
bitrix:catalog.smart.filterотметить нужные типы цен, задать вид «бегунок» и, при необходимости, добавить пресеты диапазонов. - Включить и собрать фасет. В настройках инфоблока включить фасетный индекс умного фильтра и пересобрать его, чтобы цена индексировалась диапазонно.
- Настроить шаг и округление. В шаблоне компонента задать шаг бегунка и логику округления границ под порядок цен каталога; проверить, что мин/макс шкалы «красивые».
- Согласовать фильтр с ценником. Убедиться, что диапазон фильтра совпадает с ценой, которую видит покупатель его группы, — с учётом скидок и типа цены.
- Добавить счётчики. Вывести количество товаров по диапазонам/при движении бегунка на основе фасета; погасить пустые варианты.
- Продумать пустой результат. Ограничить шкалу реальным диапазоном, настроить понятное состояние «ничего не найдено» и авто-подстройку границ.
- Адаптировать под мобильный. Фильтр в шторку, крупные ручки и поля ввода, кнопки-пресеты, применение по кнопке «Показать».
- Настроить SEO. Ходовые ценовые диапазоны оформить посадочными страницами; произвольный бегунок держать вне индекса; закрыть дубли каноническими адресами.
- Встроить пересборку фасета в обмен. После обмена с 1С (смена цен) фасет по цене должен пересобираться автоматически.
- Проверить под нагрузкой и под группами. Протестировать скорость на объёме каталога и совпадение фильтра с ценником под розницей и оптом.
Реализация: catalog.smart.filter и фасет
Соберём в одном месте, какими штатными средствами Битрикса реализуется всё описанное, — чтобы было понятно, что где настраивается.
| Задача | Инструмент 1С-Битрикс |
|---|---|
| Цена товара (розница, опт) | Типы цен модуля торгового каталога + права доступа |
| Вывод фильтра по цене | Компонент bitrix:catalog.smart.filter |
| Бегунок, шаг, округление | Шаблон компонента catalog.smart.filter (вёрстка + JS слайдера) |
| Быстрый поиск по диапазону | Фасетный индекс умного фильтра (настройки инфоблока) |
| Итоговая цена со скидками | Правила работы с ценой / скидки торгового каталога |
| Числовые свойства (вес, диагональ) | Свойства инфоблока типа «Число» в умном фильтре |
| Счётчики количества | Механика умного фильтра поверх фасета |
| SEO-страницы «до N» | SEO-страницы умного фильтра + ЧПУ и метатеги |
| Актуальность цен в фильтре | Обмен с 1С + пересборка фасета после обмена |
| Скорость вывода фильтра | Кэш компонента, управляемый кэш |
Ключевая связка выглядит так: тип цены торгового каталога даёт корректное числовое значение с учётом группы и скидок; фасетный индекс хранит это значение диапазонно и делает поиск по интервалу быстрым; компонент bitrix:catalog.smart.filter выводит фильтр и обрабатывает выбранные границы; его шаблон отвечает за вид бегунка, шаг, округление, счётчики и мобильную адаптацию. Настройки распределены по трём местам: типы цен и скидки — в торговом каталоге; фасетный индекс — в настройках инфоблока; вид и включённые источники фильтра — в параметрах и шаблоне компонента.
Отдельно про кастомизацию: чтобы поменять поведение бегунка (шаг, округление, применение по кнопке, вид счётчиков, мобильную шторку), копируют шаблон компонента умного фильтра в шаблон сайта и правят его вёрстку и JS. Логику получения границ из фасета и обработку типов цен трогают редко — их обеспечивает сам компонент. Так весь фильтр по цене собирается штатными средствами, а задача разработчика — правильно навести порядок в ценах, включить фасет и аккуратно настроить шаблон.
Частые ошибки
- Цена как строковое свойство. Самая грубая ошибка: цену завели свойством инфоблока с типом «Строка» и фильтруют по нему. Сравнение идёт как с текстом, диапазоны считаются неверно, «100» оказывается «больше» «99 000». Цена должна быть типом цены торгового каталога.
- Не учтены скидки. Карточка показывает цену со скидкой, а фильтр ищет по базовой — товар с ценником «9 900» не попадает в «до 10 000». Фильтруемую цену согласуют с той, что видит покупатель.
- Фасет отключён или не пересобран. Без фасета числовой фильтр медленный; с устаревшим фасетом — неточный. После смены цен (обмен, акция) фасет пересобирают.
- Не тот тип цены для группы. Оптовик видит в карточке опт, а фильтр показывает розницу — расхождение «фильтр ≠ ценник». Каждая группа фильтрует по своему типу цены.
- «Некрасивые» границы бегунка. Без округления шкала показывает «9 837 — 41 213». Задают шаг и округление под порядок цен каталога.
- Мультивалютный рассинхрон. Цена в фасете в одной валюте, покупатель задаёт границы в другой — товар не попадает в диапазон. Приводят цены к единой валюте.
- Товары без цены нужного типа. Если у части товаров не заведена оптовая цена, они выпадают из оптового фильтра. Контролируют полноту цен при обмене.
- Пустой результат — тупик. Покупатель попал в пустой диапазон и видит «ничего не найдено» без выхода. Ограничивают шкалу реальным диапазоном, добавляют счётчики и сброс.
- Бесконечные ценовые URL в индексе. Произвольные границы бегунка плодят параметрические страницы. В индекс пускают только осмысленные пресеты, остальное закрывают.
- Счётчики без кэша. Пересчёт количества по диапазонам на каждый показ нагружает базу. Счётчики строят на фасете и кэшируют.
- Обмен не пересобирает фасет. Цены обновились, а фильтр по цене отстал. Пересборку фасета встраивают в регламент обмена с 1С.
Чек-лист по фильтру цены
Сведём в практический список то, что проверяют при настройке и приёмке фильтра по цене перед запуском.
- Цена — это тип цены, не строка. Фильтр опирается на тип цены торгового каталога, а не на строковое свойство инфоблока.
- Фильтр совпадает с ценником. Диапазон фильтра построен на той же цене, что видит покупатель (с учётом скидок и группы).
- Типы цен разведены. Розница и опт заведены с правами доступа; нужные типы включены в умный фильтр; каждая группа фильтрует по своей цене.
- Фасет включён и свеж. Фасетный индекс по цене собран; пересборка встроена в обмен с 1С и запуск акций.
- Бегунок аккуратен. Шаг и округление заданы под порядок цен; мин/макс шкалы «красивые» и берутся из реального диапазона.
- Пресеты и SEO. Ходовые диапазоны оформлены как посадочные страницы «до N»; произвольный бегунок вне индекса; дубли закрыты канониклом.
- Счётчики работают. Количество по диапазонам считается на фасете, учитывает другие фильтры, пустые варианты погашены, вывод кэширован.
- Пустой результат не тупик. Шкала ограничена реальным диапазоном; есть понятное «ничего не найдено» и сброс; границы авто-подстраиваются.
- Валюта согласована. Валюта фильтра, отображения и фасета совпадают; при мультивалютности цены приведены к единой валюте.
- Мобильный удобен. Фильтр в шторке, крупные ручки, поля ввода, кнопки-пресеты, применение по кнопке «Показать».
- Скорость проверена. Фильтр протестирован на объёме каталога и держится на фасете и кэше, а не на вычислениях на лету.
Вывод
Фильтр по цене выглядит как простой бегунок, но за ним стоит целая инженерия: цена — это не строка, а тип цены торгового каталога; она подвижна и персональна, поэтому фильтруемую цену согласуют с той, что видит покупатель его группы, с учётом скидок и акций; числовой фильтр работает быстро только на фасетном индексе, где цена хранится диапазонно; шаг и округление делают числа «красивыми», а готовые диапазоны и бегунок дополняют друг друга и ловят ценовой спрос под SEO. Ошибётесь в любом из этих слоёв — и получите либо расхождение «фильтр ≠ ценник», либо тормоза на большом каталоге, либо пустые результаты, из которых покупатель уходит.
Практический вывод один: фильтр по цене настраивают через штатный механизм типов цен и умного фильтра, а не через строковые свойства; опирают на включённый и свежий фасет; согласуют с ценником и группой покупателя; аккуратно оформляют бегунок, пресеты и мобильную версию. Сделайте это правильно — и покупатель за секунду сузит каталог по своему бюджету, а витрина не задумается ни на большом каталоге, ни при опте, ни при акции. А если фильтр по цене нужно настроить с нуля или починить расхождения со скидками и типами цен, мы помогаем с этим в рамках разработки каталога товаров на 1С-Битрикс и создания интернет-магазина на 1С-Битрикс. Больше разборов по теме — в рубрике «Каталог и поиск».