mSearch2

05 октября 2016, 09:57

Сниппет для поиска и вывода результатов.

В работе использует 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 будет выводить все товары подряд.

При таком вызове вы сможете использовать все поля товаров в чанке оформления.