mSearchForm. Msearch2 modx
mSearch3 / Сниппеты / mSearch3 / docs.modx.pro
Сниппет для поиска и вывода результатов.
В работе использует pdoTools, поэтому обладает всеми основными возможностями: подключение ТВ, таблиц, указание условий в &where, &select и т.д. По большому счету, этот сниппет является переделанным pdoResources с двумя отличиями:
- Для вывода результатов он использует поиск и добавляет плейсхолдер [[+weight]] с набранными баллами.
- Также добавляет плейсхолдер [[+intro]] с подсвеченными совпадениями.
Сниппет должен реагировать на передаваемые запросы, поэтому его нужно вызывать некэшированным.
Параметры
&tpl | tpl.mSearch3.row | Чанк оформления для каждого результата. Обычные плейсхолдеры ресурса + [[+weight]] и [[+intro]]. |
&returnIds | false | Вернуть только список id подходящих страниц, через запятую. |
&showLog | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «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> [[!mSearch3]]Можно использовать разбивку на страницы при помощи pdoPage. mSearch3 устанавливает pdoTools автоматически, так что pdoPage у вас уже есть.
<form action="" method="get"> <input type="text" name="query" value="[[+mse2_query]]" /> <button type="submit">Искать!</button> </form> [[!pdoPage? &element=`mSearch3` ]] [[!+page.nav]]Также mSearch3 можно использовать для поиска и вывода товаров вместе с msProducts:
[[!pdoPage? &element=`msProducts` &parents=`0` &resources=`[[!mSearch3:default=`999999`?returnIds=`1`&limit=`0`]]` &sortby=`ids` ]] [[!+page.nav]]Параметр returnIds указывает msProducts список найденных товаров для вывода. А фильтр default подставляет отсутствующий id в случаях, когда ничего не найдено, иначе msProducts будет выводить все товары подряд.
При таком вызове вы сможете использовать все поля товаров в чанке оформления.
docs.modx.pro
mSearchForm / Сниппеты / mSearch3 / docs.modx.pro
Сниппет для вывода формы поиска с автодополнениями.
Из-за специфики работы через Ajax должен вызываться некэшированным.
Параметры
&pageId | Id страницы, на которую будет отправлен поисковый запрос. По умолчанию - текущая страница. | |
&tplForm | tpl.mSearch3.form | Чанк с HTML формой для вывода, обязательно должен содержать «class="msearch3"» в теге «\». |
&tpl | tpl.mSearch3.ac | Чанк оформления для каждого результата |
&element | mSearch3 | Сниппет, который будет вызываться для вывода результатов работы. По умолчанию - mSearch3. |
&limit | 5 | Лимит выборки результатов |
&autocomplete | results | Настройка автодополнения. Возможные варианты: «results» - поиск по сайту (для вывода результатов будет вызван сниппет, указанный в &element), «queries» - поиск по таблице запросов, «0» - выключить автодополнение. |
&queryVar | query | Имя переменной для получения поискового запроса из «$_REQUEST». По умолчанию - «query». |
&minQuery | 3 | Минимальная длина поискового запроса. |
&fields | Список проиндексированных полей ресурса, через запятую, в которых нужно искать. Вы можете также указать вес для каждого поля, через запятую: &fields=`pagetitle:5,content:3,comment:1`. По умолчанию используется системная настройка mse2_index_fields. | |
&onlyIndex | false | Включить режим поиска только по индексу слов, и отключить дополнительные результаты, найденные простым поиском через LIKE. |
Автодополнение
Основная функция сниппета - реализация автодополнений к набираемым запросам. Есть 2 режима:
results
Поиск производится стандартным алгоритмом: по словарному индексу с уточнениями. Затем id найденных страниц передаются в сниппет, указанный в параметре &element и уже он выводит результаты.
Вы можете указать любые параметры этому сниппету, чтобы он выводил только подходящие вам результаты. Например, документы из определенного контейнера, категории товаров и т.д.
То есть, поиск выдаёт все подходящие страницы и вы указываете, что именно выводить сниппетом. Получается, что этот режим не «дополняет» ваш запрос, а уже выводит готовые результаты. Поэтому при выборе пункта из списка вы сразу на него перейдёте.
queries
А вот этот режим уже настоящее дополнение запросов. Он проводит простенький поиск по истории запросов, которая отображается у вас системе управления.
То есть, он выводит подходящие запросы, которые уже искали другие пользователи, и нашли. Запросы с нулевым количеством результатов не будут показаны - от них никакого толку.
При выборе запроса из списка, он будет вставлен в форму и она сразу отправится.
Скрипты и стили
В работе сниппет использует скрипты и стили указанные с системных настройках:
- mse2_frontend_js - стандартный javascript, по умолчанию /assets/components/msearch3/js/web/default.js
- mse2_frontend_css - стандартные css стили оформления, по умолчанию /assets/components/msearch3/css/web/default.css
Для нормальной работы скриптам нужно знать, какие параметры были указаны при вызове сниппета, поэтому дополнительно на страницу регистрируются важные настройки, типа &minQuery, &queryVar и &autocomplete.
Если вы хотите внести какие-то изменения в стандартные файлы, нужно их переименовать и указать новые значения в системных настройках, иначе все ваши изменения будут перезаписаны при очередном обновлении.
Для реализации функционала автодополнений используется jQueryUI.autocomplete. Если он еще не подключен у вас на сайте, mSearchForm загрузит его самостоятельно. Autocomplete автоматически применяется ко всем формам на странице, у которых указан «class="msearch3"».
Примеры
Обычный вызов сниппета:
[[!mSearchForm]]mSearchForm передаёт все полученные параметры в сниппет, указанный в &element, а значит, вы можете указывать такие значения:
[[!mSearchForm? &element=`pdoResources` &includeTVs=`image,file` ]] [[!mSearchForm? &element=`msProducts` &includeThumbs=`120x90` &where=`{"Data.price:>":0}` ]]docs.modx.pro