mSearch2
Сниппет для поиска и вывода результатов.
В работе использует pdoTools, поэтому обладает всеми основными возможностями: подключение ТВ, таблиц, указание условий в &where, &select и т.д. По большому счету, этот сниппет является переделанным pdoResources с двумя отличиями:
- Для вывода результатов он использует поиск и добавляет плейсхолдер
[[+weight]]
с набранными баллами. - Также добавляет плейсхолдер
[[+intro]]
с подсвеченными совпадениями.
Сниппет должен реагировать на передаваемые запросы, поэтому его нужно вызывать некэшированным.
Параметры
Название | По умолчанию | Описание |
---|---|---|
&tpl | tpl.mSearch2.row | Чанк оформления для каждого результата. Обычные плейсхолдеры ресурса + [[+weight]] и [[+intro]] . |
&returnIds | false | Вернуть только список id подходящих страниц, через запятую. |
&showLog | false | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контексте «mgr». |
&limit | 10 | Лимит выборки результатов. |
&offset | 0 | Пропуск результатов с начала выборки. |
&depth | 10 | Глубина поиска ресурсов от каждого родителя. |
&outputSeparator | \n | Необязательная строка для разделения результатов работы. |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | |
&parents | Список категорий, через запятую, для ограничения вывода результатов. | |
&includeTVs | Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+action]] и [[+time]] . | |
&tvPrefix | Префикс для ТВ плейсхолдеров, например «tv.». | |
&where | Дополнительные параметры выборки, закодированные в JSON. | |
&showUnpublished | false | Показывать неопубликованные товары. |
&showDeleted | false | Показывать удалённые ресурсы. |
&showHidden | true | Показывать ресурсы, скрытые в меню. |
&hideContainers | false | Скрывать ресурсы-контейнеры. |
&introCutBefore | 50 | Укажите количество символов для вывода в плейсхолдере [[+intro]] перед первым совпадением в тексте. |
&introCutAfter | 250 | Укажите количество символов для вывода в плейсхолдере [[+intro]] после первого совпадения в тексте. |
&htagOpen | <b> | Открывающий тег для подсветки найденных результатов в [[+intro]] . |
&htagClose | </b> | Закрывающий тег для подсветки найденных результатов в [[+intro]] . |
&parentsVar | parents | Имя переменной для дополнительной фильтрации по родителям. Может быть передано через $_REQUEST. |
&queryVar | query | Имя переменной для получения поискового запроса из $_REQUEST. |
&tplWrapper | Чанк-обёртка, для заворачивания всех результатов. Понимает плейсхолдеры: [[+output]] , [[+total]] , [[+query]] и [[+parents]] . | |
&wrapIfEmpty | false | Включает вывод чанка-обертки &tplWrapper даже если результатов нет. |
&forceSearch | true | Обязательный поиск для вывода результатов. Если нет поискового запроса - ничего не выводится. |
&minQuery | 3 | Минимальная длина поискового запроса. |
&fields | Переопределение системной настройки веса для проиндексированных полей, через запятую: &fields=pagetitle:5,content:3,comment:1 . По умолчанию используется mse2_index_fields . | |
&showSearchLog | false | Показывать подробную информацию о начислении баллов поиска ресурсам при включенном &showLog. |
Лексиконы
Сниппет может выдавать сообщения об ошибках поиска, которые меняются с словарях системы.
- mse2_err_no_results → "Подходящих результатов не найдено".
- mse2_err_min_query → "Слишком короткий поисковый запрос". То есть, указанный запрос меньше значения &minQuery.
- mse2_err_no_query → "Задан пустой поисковый запрос".
Там же находятся и другие записи, используемые с чанках и сниппетах по умолчанию.
Форма поиска
Для работы сниппету нужен только поисковый запрос в массиве $_REQUEST
. Его может отправить простейшая форма:
<form action="/search.html" method="get">
<input type="text" name="query" value="[[+mse2_query]]" />
<button type="submit">Искать!</button>
</form>
Обратите внимание, что запрос должен передаваться под тем же именем, что указано в параметре &queryVar, по умолчанию это query.
Примеры
Если у формы указан пустой action, то она отправляется на текущую страницу:
<form action="" method="get">
<input type="text" name="query" value="[[+mse2_query]]" />
<button type="submit">Искать!</button>
</form>
[[!mSearch2]]
Можно использовать разбивку на страницы при помощи pdoPage. mSearch2 устанавливает pdoTools автоматически, так что pdoPage у вас уже есть.
<form action="" method="get">
<input type="text" name="query" value="[[+mse2_query]]" />
<button type="submit">Искать!</button>
</form>
[[!pdoPage?
&element=`mSearch2`
]]
[[!+page.nav]]
Сниппет можно вызывать вместе с mSearchForm
[[!mSearchForm]]
[[!pdoPage?
&element=`mSearch2`
]]
[[!+page.nav]]
Также mSearch2 можно использовать для поиска и вывода товаров вместе с msProducts:
[[!pdoPage?
&element=`msProducts`
&parents=`0`
&resources=`[[!mSearch2:default=`999999`?returnIds=`1`&limit=`0`]]`
&sortby=`ids`
]]
[[!+page.nav]]
Параметр returnIds
указывает msProducts список найденных товаров для вывода. А фильтр default
подставляет отсутствующий id в случаях, когда ничего не найдено, иначе msProducts будет выводить все товары подряд.
При таком вызове вы сможете использовать все поля товаров в чанке оформления.