mSearch2
mSearch2 — Сниппет для поиска и вывода результатов.
Оглавление
В работе использует pdoTools, поэтому обладает всеми основными возможностями: подключение TV, таблиц, указание условий в & 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. Его может отправить простейшая форма:
/* modParser */
<form action="/search.html" method="get">
<input type="text" name="query" value="[[+mse2_query]]" />
<button type="submit">Искать!</button>
</form>
/* pdoParser */
<form action="{$pageId | url}" method="get">
<input type="text" name="{$queryVar}" value="{$mse2_query}" />
<button type="submit">Искать!</button>
</form>
Обратите внимание, что запрос должен передаваться под тем же именем, что указано в параметре &queryVar, по умолчанию это query.
Примеры
Если у формы указан пустой action, то она отправляется на текущую страницу:
/* modParser */
<form action="" method="get">
<input type="text" name="query" value="[[+mse2_query]]" />
<button type="submit">Искать!</button>
</form>
[[!mSearch2]]
/* pdoParser */
<form action="{$pageId | url}" method="get">
<input type="text" name="{$queryVar}" value="{$mse2_query}" />
<button type="submit">Искать!</button>
</form>
{$_modx->runSnippet('!mSearch2')}
Можно использовать разбивку на страницы при помощи pdoPage. mSearch2 устанавливает pdoTools автоматически, так что pdoPage у вас уже есть:
/* modParser */
<form action="" method="get">
<input type="text" name="query" value="[[+mse2_query]]" />
<button type="submit">Искать!</button>
</form>
[[!pdoPage?
&element=`mSearch2`
]]
[[!+page.nav]]
/* pdoParser */
<form action="{$pageId | url}" method="get">
<input type="text" name="{$queryVar}" value="{$mse2_query}" />
<button type="submit">Искать!</button>
</form>
{$_modx->runSnippet('!pdoPage', [
'element' => 'mSearch2'
])}
{'page.nav' | placeholder}
Сниппет можно вызывать вместе с mSearchForm:
/* modParser */
[[!mSearchForm]]
[[!pdoPage?
&element=`mSearch2`
]]
[[!+page.nav]]
/* pdoParser */
{$_modx->runSnippet('!mSearchForm')}
{$_modx->runSnippet('!pdoPage', [
'element' => 'mSearch2'
])}
{'page.nav' | placeholder}
Также mSearch2 можно использовать для поиска и вывода товаров вместе с msProducts:
/* modParser */
[[!pdoPage?
&element=`msProducts`
&parents=`0`
&resources=`[[!mSearch2:default=`999999`?returnIds=`1`&limit=`0`]]`
&sortby=`ids`
]]
[[!+page.nav]]
/* pdoParser */
{var $res = $_modx->runSnippet('!mSearch2', [
'returnIds' => 1,
'limit' => 0,
])?: '999999'}
{$_modx->runSnippet('!pdoPage', [
'element' => 'msProducts',
'parents' => 0,
'resources' => $res,
])}
{'page.nav' | placeholder}
Параметр returnIds
указывает msProducts список найденных товаров для вывода. А фильтр default подставляет отсутствующий id в случаях, когда ничего не найдено, иначе msProducts будет выводить все товары подряд.
При таком вызове вы сможете использовать все поля товаров в чанке оформления.
Время запросов: 0,1177 s
Количество запросов: 27
Источник: cache