# URL-грамматика Vesremont Ниже описан фактический протокол, который обрабатывают серверная часть и JavaScript сайта. В примерах `{...}` означает переменную часть, а не буквальный текст. ## Страницы | Назначение | Паттерн | |---|---| | Корень каталога | `/catalog/` | | Валидное состояние каталога | `/catalog/{validated-path}/` | | Товар | `/catalog/product/{product-code}/` | | Бренд | `/catalog/brand/{brand-code}/` | | Все бренды | `/brand/` | | Поиск | `/search/?search={url-encoded-text}` | | Отзывы состояния каталога | `/catalog/{validated-path}/otziv/` | | Корзина | `/personal/basket/` | `{validated-path}` проверяется сервером по актуальному набору валидных URL. Не конструируйте и не переставляйте его сегменты без готового `href` или URL из sitemap. ## Категориальные фасеты Дополнительное значение передаётся повторяемым параметром: ```text filter={facet-value-code} ``` Несколько разных групп: ```text ?filter={code-1}&filter={code-2} ``` Коды чувствительны к фактическим данным каталога. Получайте их из `data-filter-value-code` и используйте опубликованный `href`; не выводите код из видимого названия. Штатный интерфейс переключает значение внутри одной группы и комбинирует значения разных групп. ## Числовые диапазоны ```text range={filter-id}_s_o_{min}-e_d_{max} ``` Фактический синтаксис содержит подчёркивание после ID, не знак `=`. ID, min и max — неотрицательные целые числа; текущий HTML задаёт `step="1"`. Несколько диапазонов — повторяемые параметры: ```text ?range={id-1}_s_o_{min-1}-e_d_{max-1}&range={id-2}_s_o_{min-2}-e_d_{max-2} ``` `filter-id=1` зарезервирован реализацией для цены. Остальные ID обозначают числовые характеристики и должны присутствовать на текущей странице. Сервер отбрасывает неизвестные ID и корректирует выходящие за доступные границы значения. Реальный пример существующего формата: ```text /catalog/krepyezh/?range=1_s_o_82704-e_d_476950&range=4283_s_o_398-e_d_1437 ``` ## Сортировка товаров ```text sorts=id_sort sorts=price_min sorts=price_max ``` - `id_sort` — штатный порядок «Новинки»; UI обычно удаляет параметр и использует его как default. - `price_min` — сначала дешевле. - `price_max` — сначала дороже. Параметр `sort` в `robots.txt` — старое SEO-правило и не является интерфейсом текущего каталога. Используется именно `sorts`. ## Пагинация товаров ```text page={positive-integer} ``` `page=1` является начальным состоянием и обычно удаляется генератором ссылок. Ссылки пагинации публикуются в HTML. Изменение фасета или range сбрасывает `page`; смена сортировки может сохранить текущую страницу. ## Комбинация query Поддерживается совместное использование повторяемых `filter`, повторяемых `range`, одного `sorts` и одного `page`, например: ```text /catalog/{validated-path}/?filter={code}&range={id}_s_o_{min}-e_d_{max}&sorts=price_min&page=2 ``` Порядок query-параметров не является смысловым. При кодировании используйте обычный percent-encoding; не кодируйте разделители `_s_o_`, `-e_d_`, `&` и `=` как часть значений вручную. ## Отзывы категории На URL с окончанием `/otziv/` обрабатываются: - `otziv_sort=old|rating_high|rating_low`; отсутствие параметра означает сначала новые; - `otziv_rating=1|2|3|4|5`; - `otziv_media=1`; - `otziv_offset={positive-integer}` для следующей пачки; - те же `filter` и `range`, что определяют исходное состояние категории. Кнопки отзывов сейчас изменяют эти параметры через JavaScript. Агент может построить URL по указанным допустимым значениям. ## Поиск ```text GET /search/?search={text} ``` Других публичных query-параметров, сортировки или пагинации у страницы поиска текущая реализация не предоставляет.