Мульти-колоночная сортировка в dynamic-списках
Как задать цепочку полей для ORDER BY через sort.then в page_config
sort.then — вторичная сортировка
В page_config для dynamic-страниц ключ sort поддерживает опциональный then — массив полей для вторичной сортировки.
Это полезно когда нужно отсортировать записи сначала по одной колонке, а внутри одинаковых значений — по другой.
Базовый синтаксис
{
"source_table": "docs",
"template": "docs",
"sort": {
"field": "category",
"order": "ASC",
"then": [
{"field": "sort_order", "order": "ASC"}
]
},
"items_per_page": 50
}
Полный пример с несколькими then
"sort": {
"field": "section_title",
"order": "ASC",
"then": [
{"field": "sort_order", "order": "ASC"},
{"field": "created_at", "order": "DESC"}
]
}
Такой конфиг выдаст записи отсортированными по section_title (A-Z), внутри групп — по sort_order (возрастание), при одинаковом sort_order — по created_at (свежие сверху).
Какие поля можно использовать
Любые колонки из исходной таблицы (source_table). Имена полей фильтруются: разрешены только символы a-z, A-Z и _.
Если поле указано неверно или не существует — SQL-запрос вернёт ошибку, страница покажет 404 (режим debug покажет детали).
Обратная совместимость
Старый формат без then продолжает работать:
"sort": {"field": "sort_order", "order": "ASC"}
Если then отсутствует — поведение точно такое же как раньше.
Что изменилось технически
Поля в SQL-запросе теперь оборачиваются в двойные кавычки:
ORDER BY "section_title" ASC, "sort_order" ASC, "created_at" DESC
Это защищает от конфликтов с зарезервированными словами SQL (например, order, group, index).
Когда использовать
- Каталог по разделам — группировка по
category, внутри поsort_order - Блог с закреплёнными постами — сначала
is_pinned DESC, потомcreated_at DESC - Чейнджлог — группировка по типу релиза, внутри по версии
- Таблица с категориями — сначала категория, внутри позиция