Дата публикации
3 Июня 2019
Дата изменения
30 Апреля 2021
Уникальных просмотров
3.942

Оглавление

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

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

Благодарность автору

Если по какой-либо причине вы хотите поблагодарить автора данного ресурса, вы можете это сделать одним из удобных для вас способов ниже.

Один из самых популярных способов поблагодарить автора, воспользоваться сервисом Яндекс.Деньги.

Время работы: 0,1174 s
Время запросов: 0,1174 s
Количество запросов: 27
Источник: cache