- mSearch2
- Оглавление
- Параметры
- Лексиконы
- Форма поиска
- Примеры
- Благодарность автору
- Поиск по сайту на MODX Revolution — mSearch
- Создание страницы для вывода результатов поиска в MODX
- Создание формы поиска
- Вывод результатов с постраничной пагинацией
- FENOM’енальный курс. Часть 14. Поиск по сайту на mSearch2 на Fenom.
- Петропавловский Артем
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 | Открывающий тег для подсветки найденных результатов в [[+intro]] . | |
| &htagClose | Закрывающий тег для подсветки найденных результатов в [[+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. Его может отправить простейшая форма:
Обратите внимание, что запрос должен передаваться под тем же именем, что указано в параметре &queryVar, по умолчанию это query.
Примеры
Если у формы указан пустой action, то она отправляется на текущую страницу:
Можно использовать разбивку на страницы при помощи pdoPage. mSearch2 устанавливает pdoTools автоматически, так что pdoPage у вас уже есть:
Сниппет можно вызывать вместе с mSearchForm:
Также mSearch2 можно использовать для поиска и вывода товаров вместе с msProducts:
Параметр returnIds указывает msProducts список найденных товаров для вывода. А фильтр default подставляет отсутствующий id в случаях, когда ничего не найдено, иначе msProducts будет выводить все товары подряд.
При таком вызове вы сможете использовать все поля товаров в чанке оформления.
Благодарность автору
Если по какой-либо причине вы хотите поблагодарить автора данного ресурса, вы можете это сделать одним из удобных для вас способов ниже.
Один из самых популярных способов поблагодарить автора, воспользоваться сервисом Яндекс.Деньги.
Источник
Поиск по сайту на MODX Revolution — mSearch
Почти любой сайт должен иметь такой функционал как поиск. Во всех CMS есть для этого дополнения или компоненты, не стал исключением и MODX Revo. Самым популярным пакетом в MODX для этих целей является «SimpleSearch». Несмотря на это мы воспользуеся другим компонентом — «mSearch». Его преимущество заключается в учитывании при поиске морфологии русского языка, а так же в повышенной скорости работы.
К сожалению, у этого пакета есть и недостатки:
- Во-первых, его нет в официальном репозитории MODX. Тем не менее, его можно без проблем найти через поисковые системы, либо скачать по этой ссылке.
- Во-вторых, автор прекратил его поддержку, переписал компонент заново, назвал его «mSearch2» и теперь он платный. Тем не менее, я настроил старую версию и она прекрасно работает.
- В-третьих, у него есть проблемы с выводом TV параметров при выдаче результатов, но мы обойдём это хитрым способом.
Создание страницы для вывода результатов поиска в MODX
Устанавливаем дополнения «mSearch» и «pdoTools». Второе дополнение есть в официальном репозитории MODX. Из него нам потребуется сниппет «pdoResources», хотя вполне можно вместо него использовать и «getResources». Это на ваше усмотрение.
Затем создадим страницу (ресурс), которая будет отвечать за вывод результатов поиска. Шаблон для этого ресурса в большинстве случаев подходит стандартный, требование одно — основное место в нём должно выделяться под содержимое ресурса. В содержимом страницы вызываем сниппет «pdoResources», в параметре к которому передаём id найденных ресурсов сниппетом «mSearch»:
В этом примере мы немного извратились. По идее, сам сниппет поиска может выводить результаты, но на деле он некорректно отображает связанные с ресурсом TV параметры. Точнее он их отображает только для первого найденного ресурса. Чтобы обойти это мы настроили «mSearch» так, чтобы он выдал только id найденных ресурсов, а их вывод и оформление мы осуществляем через «pdoResources».
Используемые плейсхолдеры и параметры:
- [[+mse.query]] — плейсхолдер выводит строку запроса.
- [[+total]] — выводит количество найденых ресурсов.
- [[+mse.error]] — выводит ошибки, например при отсутствии найденных ресурсов выведет об этом сообщение.
- &templates=`4` — параметр задаёт поиск только среди ресурсов с этими номерами шаблонов, через запятую. Если требуется искать по всему сайту, указываем все шаблоны. Так же вместо этого параметра можно использовать &parents , в котором потребуется указать список ресурсов-родителей, в которых будет производиться поиск.
- &returnIds=`1` — указывает на то, что требуется вернуть id найденных страниц.
- &tpl=`articleTpl` — параметр сниппета «pdoResources» — указывает чанк для оформления результата вывода одной страницы. В нём можно вывести название ресурса, TV параметры и.т.п. Например:
Создание формы поиска
Осталось передать созданной странице параметр, через который сниппет «mSearch» узнает, что именно надо искать. Для этого в любом месте сайта располагаем следующий код:
Как вы наверно догадались, [[
20]] это id страницы, которую мы создали на предыдущем шаге. Вся задача этой формы — отправить ей методом «GET» или «POST» параметр «query». Можно приступать к тестированию, так как основная часть поиска на MODX закончена.
Вывод результатов с постраничной пагинацией
Если в выдаче очень много ресурсов, то целесообразно использовать постраничный вывод. Для этого можно использовать сниппет «getPage» или «pdoPage». Последний входит в состав дополнения «pdoTools», поэтому пример именно с ним:
Форма поиска должна обязательно передавать параметр «query» методом «GET».
Источник
FENOM’енальный курс. Часть 14. Поиск по сайту на mSearch2 на Fenom.
Приступим с вами к уже знакомой нам части разработки – реализации поиска по сайту, но в этот раз на основе компонента mSearch2. Почитать как мы это делали ранее на основе SimpleSearch вы можете в статье “Поиск по блогу с помощью SimpleSearch”.
Я нашел 3 места, где у нас должна выводиться форма поиска, за которую отвечает сниппет mSearchForm:
- В шапке сайта
- Блок меню в мобильной версии
- Страница поиска
Так как у нас нет в комплекте шаблона страницы поиска, предлагаю вам пока скопировать шаблон текстовой страницы. Начнем мы с вами с того, что создадим ресурс страницы поиска. Посмотрите, как это сделано у меня:
Я думаю, что мы пойдем с вами сверху вниз и сначала выведем форму в шапке сайта:
Параметр pageId – это идентификатор ресурса, на котором мы будем выводить результаты поиска. Чанк search_form_desktop.tpl:
Вызов mSearchForm в блоке мобильного меню:
Чанк search_form_mobile.tpl:
Вызов в шаблоне поиска по сайту:
Чанк search_form_page.tpl:
В данных чанках мы с вами использовали новую Fenom-конструкцию <$.get.query>, которая позволяет нам получать элементы массива GET. Аналогично можно получать элементы массивов REQUEST, POST, SESSION.
Отлично! Формы мы вывели. Теперь нам нужно вывести обработчик запроса. Поиск, я думаю, мы с вами будем производить только по товарам. Сниппет mSearch2 будет возвращать только id найденных ресурсов, а их мы будем передавать в сниппет msProducts. В итоге у нас получится примерно такой шаблон страницы поиска по сайту:
Теперь можно проверить функциональность нашего поиска по сайту. Надеюсь, что у вас так же, как и у меня все получилось с первого раза.
Петропавловский Артем
автор
Основатель Dart Agency, web-разработчик, блоггер.
Источник