mSearchForm. Msearch2 modx


mSearch3 / Сниппеты / mSearch3 / docs.modx.pro

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

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

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

Параметры

Название По умолчанию Описание
&tpl tpl.mSearch3.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. Его может отправить простейшая форма:

<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]]

Сниппет можно вызывать вместе с mSearchForm

[[!mSearchForm]] [[!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

А вот этот режим уже настоящее дополнение запросов. Он проводит простенький поиск по истории запросов, которая отображается у вас системе управления.

То есть, он выводит подходящие запросы, которые уже искали другие пользователи, и нашли. Запросы с нулевым количеством результатов не будут показаны - от них никакого толку.

При выборе запроса из списка, он будет вставлен в форму и она сразу отправится.

Скрипты и стили

В работе сниппет использует скрипты и стили указанные с системных настройках:

Для нормальной работы скриптам нужно знать, какие параметры были указаны при вызове сниппета, поэтому дополнительно на страницу регистрируются важные настройки, типа &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

Помощь с запросом msearch3 / modx.pro

Есть вызов msearch3[[!mSearch3:default=`999999`? &limit=`0` &includeTVs = `tv_users_group` &where = `{"tv_users_group:IS":null, "OR:tv_users_group:=":"inspirit"}` &showLog = `1` ]]на null проверяю, так как значение по умолчанию. лог запроса"SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties`, `intro`, IFNULL(`TVtv_users_group`.`value`, 'Users') AS `tv_users_group` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_mse2_intro` `Intro` ON `modResource`.`id`=`Intro`.`resource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVtv_users_group` ON `TVtv_users_group`.`contentid` = `modResource`.`id` AND `TVtv_users_group`.`tmplvarid` = 18 WHERE ( `TVtv_users_group`.`value` IS NULL OR `TVtv_users_group`.`value` = 'inspirit' AND `modResource`.`id` IN (393) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) GROUP BY modResource.id ORDER BY FIELD(`modResource`.`id`,'393') "Если глянуть в where то видно что указан 393 ресурс, при этом в этом ресурсе TVtv_users_group = inspirit, но при таком запросе вываливает все ресурсы сайта, это и странно, есть же условие AND `modResource`.`id` IN (393)… Что не так с запросом, не подскажите? Мне надо выбрать ресурсы из тех которые попали в IN, и у которых значение TVtv_users_group null или inspirit

modx.pro


Prostoy-Site | Все права защищены © 2018 | Карта сайта