Оглавление

В работе использует pdoTools, поэтому обладает всеми основными возможностями: подключение TV, таблиц, указание условий в & where, & select и т. д. По большому счету, этот сниппет является переделанным pdoResources с двумя отличиями:

Сниппет должен реагировать на передаваемые запросы, поэтому его нужно вызывать некэшированным.

Параметры

Название По умолчанию Описание
&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.

Лексиконы

Сниппет может выдавать сообщения об ошибках поиска, которые меняются с словарях системы.

Там же находятся и другие записи, используемые с чанках и сниппетах по умолчанию.

Форма поиска

Для работы сниппету нужен только поисковый запрос в массиве $_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 будет выводить все товары подряд.

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