Урок 25. Создание AJAX поиска на сайте
Создадим живой AJAX поиск на сайте. Для этого нам понадобятся:
- дополнение mSearch - Документация mSearch
- библиотека jquery
Установка mSearch и индексация страниц сайта
Установим дополнение mSearch через репозиторий дополнений и проиндексируем все наши ресурсы. Для этого нужно вызвать на любом удобном вам ресурсе вызов mSearch в виде:
Это проиндексирует первые 500 ресурсов, далее выставляем значение offset=`500` и индексируете следующие 500 ресурсов и т.д.
После того как вы проиндексировали всё 1 раз, все новосозданные или изменённые ресурсы индексирует плагин, который идёт в комплекте с mSearch, более подробно: http://bezumkin.ru/modx/msearch/
Создание страницы приёма поисковых запросов
Создадим страницу, которая будет принимать поисковые AJAX запросы и отправлять ответы в виде HTML кода на целевую страницу. Создадим её с названием search-results и этим же псевдонимом search-results, назначим пустой шаблон и сохраним. URL, по которому должна отрываться страница, будет в таком случае yoursite.com/search-results.html. Вставим следующий код в поле "Содержимое" (Content):
После сохранения нажмём "Просмотр" и создадим парочку запросов к этой странице для проверки её работоспособности, например вот так (ссылки кликабельны): ?query=resource ?query=modx. После проверки работоспособности перейдём к созданию самой страницы поиска.
Создание AJAX страницы поиска
Данная страница будет отправлять GET запрос по адресу yoursite.com/search-results.html и получать от неё ответ в виде html кода - это и есть наш AJAX. Создадим чанк ajax-search и вставим туда код или просто вставим в код шаблона этот код:
Форма с классом .sisea-search-form отправляет GET запрос, далее наша страница должна принять данный код и вставить его в контейнер с классом .site-search-results. Вставим следующий скрипт, который будет это делать, в HEAD нашего сайта:
Перед скриптом нужно вызвать библиотеку jQuery.
Рекомендую для изучения
Nov 29 2012 AJAX jquery mSearch дополнения уроки MODx Revolution Виктор Матушевский
Виталий Сафонов
07.12.2012 12:59Скажите пожалуйста, а можно сделать поиск только по определенному столбцу одной из таблиц базы данных?
Viktor Minator
07.12.2012 13:03Можно, только вместо mSearch прийдёться использовать свой сниппет, который будет выдавать результаты поиска по этому столбцу.
Виталий Сафонов
07.12.2012 13:08А можете подсказать как?
Перепадя Юрий
25.12.2012 13:50А как без AJAX указать страницу результатов поиска? Не хочу AJAX, он всю картину ломает, как только начинаешь вводить запрос. Видимо конфликт скриптов где-то. Итак, куда страницу search-results.html вписывать или ее id?
Viktor Minator
25.12.2012 19:24Если вы хотите без AJAX, то пройдите по первой ссылке в статье - Документация mSearch, там всё подробно описано.
Денис Богдановский
28.02.2013 12:23Виктор, меня то же интересует возможность вывода результатов поиска на другой ресурс по этой ссылке http://bezumkin.ru/modx/msearch/ ничего не нашел... Может есть какой нибудь параметр, типа &landingPage=`` что бы укзать id ресурса? Перенаправлять с помощью getPage, если да, то как?
Денис Богдановский
28.02.2013 13:55Виктор, я сам разобрался... :)
Віктор Матушевський
28.02.2013 18:36Молодец. Вот так бы каждый.
Дима Лукьянов
03.01.2013 16:44Все работает, спасибо, однако очень бы хотелось производить поиск только по pagetitle, потому как при вводе в поиск попадают куски статей и прочего текста, которые полностью ломают вид. Подскажите пожалуйста как это реализовать
володя володин
25.02.2013 07:56&indexFields
по умолчанию: pagetitle,longtitle,description,introtext,content
описание: Поля ресурсов для индексации.
володя володин
01.03.2013 07:48я пожалуй поспешил с ответом... это индексирует он по этим полям, а поиск то ведет по всем!
вопрос остается - как заставить искать только по определенному полю?
володя володин
05.03.2013 07:32сам же и отвечу)
никак. Поиск идет по всем полям что указаны в индексе
Перепадя Юрий
10.01.2013 13:08Спасибо за хорошую статью! Но как вывести сообщение "ничего не найдено" при пустом результате?
володя володин
25.02.2013 07:50+mse.error
Munk
22.04.2013 23:04Не работает же. Загружается только:
Munk
22.04.2013 23:06только див pagination с пустым списком
Дмитрий Иванов
24.06.2013 19:29А можно вкратце описание как сделать mSearch без AJAX, а то ссылка уже не работает и описание найти не могу.
Мне нужно выводить производителей товара по ссылке. В ссылке id производителя.
Есть mProduct где в параметр where можно подставить id производителя, но не знаю как присабачить id из ссылки в параметр where при вызове msProduct. Поэтому думаю решить это через mSearch.
Может подскажете одно из двух, либо как подставить параметр из ссылки в вызов msProduct или как сделать mSearch без Ajax?
Дмитрий Куликов
14.02.2014 10:46Спасибо большое!!! Получилось , но не с первого раза
Михаил Чеков
05.06.2014 15:58Для вывода результатов без ajax, в input формы, которая используется для поиска необходимо указать name="query"
у тега form должен быть method="post" action="" , id - номер ресурса, на котором идет вызов msearch
Алла Борисова
16.09.2014 08:06Добрый день! Подскажите пожалуйста как он ищет. Мне нужно чтобы искал фразу целиком в разных падежах, а он я так поняла ищет отдельно по словам на странице. Это можно как-то настроить?