# Фильтры каталога ## Категориальные фильтры Каждая группа имеет контейнер: ```html
``` Значения представлены ссылками со следующими атрибутами: - `href` — готовое следующее состояние; это основной интерфейс; - `data-filter-id` и `data-filter-name` — группа; - `data-filter-value-id` — внутренний ID значения; - `data-filter-value-code` — символьный код URL; - `data-checked="true|false"` — текущее состояние; - видимые имя и количество подходящих товаров. Используйте `href`, потому что сервер может переместить значение между path и повторяемым `filter=...`, а также нормализовать порядок path-сегментов. ## Диапазонные фильтры Контейнер диапазона публикует: ```html
``` Number inputs дополнительно содержат `data-filter-id` и `data-range-bound="min|max"`. Значения формируются из тех же серверных данных, что и UI, и обновляются после AJAX-навигации. Алгоритм для запроса «длина 500–1000»: 1. Найдите range-контейнер с `data-filter-name="Длина"`. 2. Прочитайте его ID, допустимые min/max и step. 3. Ограничьте запрос пользователя опубликованными границами и соблюдайте step. 4. Удалите существующий `range` с тем же ID. 5. Добавьте `range={id}_s_o_500-e_d_1000`. 6. Удалите `page`, потому что набор результатов изменился. 7. Откройте URL и проверьте новые `data-range-selected-*`. Если выбран полный опубликованный диапазон, штатный UI удаляет соответствующий `range` из URL. ## Несколько фильтров - Разные категориальные группы комбинируются. - Разные range ID комбинируются повторяемыми `range`. - Категориальные и range фильтры комбинируются между собой. - UI предполагает переключение, а не множественный выбор нескольких значений одной категориальной группы. ## Сброс Активные категориальные значения и группы имеют ссылки сброса. Активный range имеет ссылку, которая удаляет только параметр соответствующего ID. Предпочитайте эти ссылки ручному редактированию сложного path. ## Динамичность Допустимые значения, количества и границы зависят от выбранной категории и остальных фильтров. Не кэшируйте их как глобальный справочник и не переносите ID между несвязанными страницами без повторной проверки HTML. В WebMCP сначала вызывайте `get_catalog_filters` без `filterId`: он возвращает до трёх групп, `nextOffset` и выбранные значения. Для раскрытия конкретной группы повторите вызов с её `filterId`; значения также идут страницами до трёх элементов через `nextValueOffset`. Для перехода используйте возвращённый `resultUrl` или типизированные `set_catalog_range`/`set_catalog_sort`.