
Фильтры на странице поиска
Фильтры по результатам поиска mSearch работают, если mFilter вызван раньше mFilterForm. mFilter находит товары по запросу, а форма строит значения фильтров по ним.
Задача
На странице с результатами поиска вывести форму фильтров: значения и числа — только по найденным товарам, выбор фильтра — без потери поискового запроса.
Решение
{'!mSearchForm' | snippet}
{* Сначала mFilter — вывод в переменную *}
{set $mfilterOutput = '!mFilter' | snippet : [
'element' => 'msProducts',
'parents' => 0,
]}
<aside>
{'!mFilterForm' | snippet}
</aside>
<main>
{$mfilterOutput}
</main>Странице поиска нужен набор фильтров: привяжите её к набору в админке mFilter, как раздел каталога.
mFilter берёт запрос из параметра mse_query — так его называет mSearchForm. Если в форме поиска параметр другой, укажите его: 'searchVar' => 'query'.
Почему так
Порядок вызова
mFilter находит товары по запросу и передаёт их форме плейсхолдером mfilter.baseIds. mFilterForm, вызванный раньше, плейсхолдера не видит и берёт товары самой страницы:
- у отдельной страницы поиска товаров нет — форма останется без фильтров;
- на разделе каталога форма покажет значения всего раздела, а не найденных товаров.
Вызов {set $mfilterOutput = … } выполняет mFilter сразу, а его вывод ставится ниже, в нужном месте разметки.
Где искать
Поиск работает только с &element. Найденные товары пересекаются с теми, что отбирает элемент:
parents | Где ищет |
|---|---|
0 или корень каталога | Во всём каталоге |
| Раздел каталога | Только в разделе |
| Страница без товаров | Берёт все найденные mSearch |
Фильтрация после поиска
Запрос сохраняется вместе с настройками вызова mFilter. Выбор фильтра в форме уходит AJAX-запросом, а сервер снова ищет по тому же запросу. Параметр mse_query остаётся в адресе.
Если не работает
| Симптом | Причина |
|---|---|
| На странице поиска форма пустая | mFilterForm вызван раньше mFilter или страница не привязана к набору фильтров |
| Числа у фильтров — по всему разделу, а не по найденному | mFilterForm вызван раньше mFilter |
| Выдача не меняется от запроса | Параметр запроса в форме поиска не mse_query, а searchVar не указан. Или mFilter вызван без &element |
| Выбор фильтра не обновляет выдачу | mFilter вызван с toPlaceholders: вывод теряет обёртку из tplOuter, и скрипту некуда вставлять товары |
