
Сортировка значений фильтра
Управление порядком отображения значений в фильтрах.
Уровни сортировки
Сортировка значений настраивается на двух уровнях:
- Конфигурация фильтра (в наборе фильтров) — настройки в JSON
- Параметры сниппета mFilterForm — переопределение для вывода
Порядок по умолчанию
По умолчанию значения сортируются по количеству товаров (DESC) — сначала популярные значения.
Настройки в конфигурации фильтра
В админке mFilter → Наборы фильтров можно указать параметры сортировки для каждого фильтра:
{
"color": {
"type": "default",
"source": "option",
"field": "color",
"label": "Цвет",
"sort": "value",
"sort_dir": "asc"
}
}Параметры сортировки
| Параметр | Описание | Значения |
|---|---|---|
sort | Поле сортировки | count (по умолчанию), value |
sort_dir | Направление | desc (по умолчанию), asc |
selected_first | Выбранные вверху | true, false |
pinned | Закреплённые значения | Массив значений |
custom_order | Полный кастомный порядок | Массив значений |
Примеры конфигурации
По алфавиту (А-Я)
{
"brand": {
"type": "default",
"source": "option",
"label": "Бренд",
"sort": "value",
"sort_dir": "asc"
}
}По алфавиту (Я-А)
{
"brand": {
"type": "default",
"source": "option",
"label": "Бренд",
"sort": "value",
"sort_dir": "desc"
}
}По количеству товаров (больше → меньше)
{
"color": {
"type": "default",
"source": "option",
"label": "Цвет",
"sort": "count",
"sort_dir": "desc"
}
}По количеству товаров (меньше → больше)
{
"color": {
"type": "default",
"source": "option",
"label": "Цвет",
"sort": "count",
"sort_dir": "asc"
}
}Выбранные значения вверху
Активированные пользователем значения поднимаются наверх списка:
{
"size": {
"type": "default",
"source": "option",
"label": "Размер",
"sort": "value",
"sort_dir": "asc",
"selected_first": true
}
}Закреплённые значения
Определённые значения всегда вверху, остальные сортируются стандартно:
{
"brand": {
"type": "default",
"source": "option",
"label": "Бренд",
"pinned": ["Apple", "Samsung", "Xiaomi"],
"sort": "count",
"sort_dir": "desc"
}
}Результат:
- Apple
- Samsung
- Xiaomi
- (остальные по убыванию количества)
Полностью кастомный порядок
Явно задаём порядок всех значений:
{
"size": {
"type": "default",
"source": "option",
"label": "Размер",
"custom_order": ["XS", "S", "M", "L", "XL", "XXL"]
}
}Значения, не указанные в custom_order, добавляются в конец.
Параметры сниппета mFilterForm
sortByCount
Переопределяет сортировку — значения с большим количеством товаров вверху:
{'!mFilterForm' | snippet : [
'resourceId' => $_modx->resource.id,
'sortByCount' => 1
]}Приоритет
Параметр sortByCount в сниппете применяется после сортировки из конфигурации фильтра и переопределяет её.
hideZero
Скрывает значения с нулевым количеством товаров:
{'!mFilterForm' | snippet : [
'resourceId' => $_modx->resource.id,
'hideZero' => 1
]}По умолчанию hideZero = true.
Комбинирование настроек
Бренды: популярные + алфавит
{
"brand": {
"type": "default",
"source": "option",
"label": "Бренд",
"pinned": ["Apple", "Samsung"],
"sort": "value",
"sort_dir": "asc"
}
}Результат:
- Apple (закреплён)
- Samsung (закреплён)
- ASUS (алфавит)
- Dell (алфавит)
- HP (алфавит)
- ...
Размеры: кастомный порядок + выбранные вверху
{
"size": {
"type": "default",
"source": "option",
"label": "Размер",
"custom_order": ["XS", "S", "M", "L", "XL", "XXL"],
"selected_first": true
}
}Порядок применения
Сортировка применяется в следующем порядке:
- custom_order — если указан, полностью определяет порядок
- sort + sort_dir — стандартная сортировка (если нет custom_order)
- selected_first — выбранные поднимаются вверх
- pinned — закреплённые значения перемещаются в начало
- sortByCount (сниппет) — финальная пересортировка по количеству
Натуральная сортировка
Для поля value используется натуральная сортировка (strnatcasecmp), что корректно сортирует числа в строках:
- Обычная:
1, 10, 2, 20, 3 - Натуральная:
1, 2, 3, 10, 20
Это важно для размеров (S, M, L, XL) и числовых значений в строках.
Примеры для разных типов фильтров
Цвета — по популярности
{
"color": {
"type": "colors",
"source": "option",
"label": "Цвет",
"sort": "count",
"sort_dir": "desc"
}
}Производители — алфавит с топ-3 вверху
{
"vendor": {
"type": "vendors",
"source": "ms3",
"label": "Производитель",
"pinned": ["Apple", "Samsung", "Sony"],
"sort": "value",
"sort_dir": "asc"
}
}Годы — от новых к старым
{
"year": {
"type": "year",
"source": "field",
"field": "publishedon",
"label": "Год",
"sort": "value",
"sort_dir": "desc"
}
}Размеры одежды — кастомный порядок
{
"size": {
"type": "default",
"source": "option",
"field": "size",
"label": "Размер",
"custom_order": ["XXS", "XS", "S", "M", "L", "XL", "XXL", "XXXL"]
}
}