Про AjaxSearch

или как я настраивала поиск

Пример настройки вызова сниппета AjaxSearch с ранжированием и плюшками

01.06.2014

Эта статья написана в далеком 2014 году, актуальна для ModX Evolution тех времен.

Итак, есть сайт на ModX Evo, на нем есть форма поиска, которая работает на стандартном AjaxSearch.

Форму поиска взяли обычную, поэтому приводить ни ее саму, ни кусок css не буду. Скажу лишь, что обычная форма - это форма по умолчанию, которая описана в файле assets/snippets/ajaxSearch/templates/input.tpl.html. Если вдруг вы хотите использовать свою замечательную форму, вы можете указать чанк, где она описана, или файл в параметре &tplInput.

В шаблоне, как раз в том месте, где предполагается форма поиска стоит вызов сниппета:

[!AjaxSearch? &ajaxSearch=`0` &landingPage=`10` &showResults=`0` &showIntro=`0`!]

Разберемся, что это значит и зачем оно так устроено.

Результаты поиска выводятся на специальной странице, ajax использовать не стали в силу общей концепции сайта. По сути, в параметрах написано то же самое. &ajaxSearch=`0` - не используем ajax, &landingPage=`10` - результаты выводим на специальной страничке с id 10, &showResults=`0` - а на странице вызова результаты не показываем, &showIntro=`0` - нет, приглашение начать поиск нам тоже не надо показывать.

В шаблоне больше ничего не требуется, все самое интересное будет на той самой страничке с id 10.

А на страничке с id 10 сделать надо много. Во-первых, подготовить саму страничку для выполнения миссии. Для этого надо снять галочки “Показывать в меню” и “Доступен для поиска”. Ну или сделать аналогичные манипуляции - в разных версиях ModX эти галочки называются по-разному. Видела даже галочку-антипод “Не показывать в меню” - такую надо, наоборот, установить. Для чего это все - для нашего любимого SEO. Ну и еще каждый уважающий себя SEO-мастер, конечно, закроет эту страничку в robots.txt.

Во-вторых, объяснить, как именно надо показать результаты поиска. Вызов сниппета вида [!AjaxSearch? &ajaxSearch=`0`!] вполне рабочий - результаты будут, но надо навести красоту и порядок.

Было решено, что достаточно формы в шапке сайта и что не нужно ее повторять отдельно на этой страничке. Поэтому требуется установить параметр &showInputForm=`0`.

Результаты поиска разбиваются на “странички”, по умолчанию на одну такую страничку помещается 6 штук результатов - такое вот странное умолчание. Для меня это показалось немного некомфортным - слишком привыкла к разбиению по 10. Вот и здесь параметр &grabMax=`10` указывает, что я хочу видеть по 10 результатов на каждой страничке.

Привычно и то, что под ссылкой я вижу отрывок текста, в котором встречается мой запрос. Здесь сделаем также, используя параметр &extract. На подопытном сайте тв-параметры не содержат информации, которую было бы приятно видеть в результатах поиска, но зато текстовые описания в [*description*] и [*introtext*] достаточно информативны и хорошо проработаны. Поэтому я сообщу сниппету, что я хочу видеть одну выключку из текста, в которой встречается запрос, и эту выключку надо искать в соответствующих полях: &extract=`1:content,description,introtext`.

Теперь можно представить себя Гуглом или Яндексом и ввести ранжирование результатов в выдаче. Я считаю, что самая главная информация о содержании содержится в названии - если запрос есть в названии, значит, нам это будет интересно. Конечно, будет интересно, если запрос есть и в описании, и в аннотации. А вот наличие запроса в контенте не означает, что попали в точку. Поэтому выставим соответствующие ранги для полей: &rank=`pagetitle:90,description:60,introtext:30,content`. Значения рангов относительные, то есть, конкретное их значение не важно, главное - показать разницу в “весе”. По умолчанию результаты ранжируются по принципу pagetitle:100,extract - тоже вполне рабочий вариант.

Что делать нашему “поисковику”, если он нашел два результата с одним рангом? Я не стала заморачиваться и поставила, что в этом случае сортируем по названию: &order=`pagetitle`.

Теперь про внешний вид, лоск и франтоватость. Если вдруг стандартный вид результатов не подходит, можно написать свой, с блекджеком и плюшками ;) “Скормить” его сниппету можно в параметре &tplResult, что я и сделала.

Больное место - пагинация, а именно ее внешний вид. Одно из популярных решений в интернете - правка кода в файле ajaxSearchOutput.class.inc.php. И хотя предложенный вариант достаточно симпатичен, у него есть недостаток - он обещает неудобства при обновлении. Поэтому на сайте остается стандартное решение “из коробки” до времени, пока не найдется удобный вариант для поправки.

В итоге получается вот такой вызов:

[!AjaxSearch? &ajaxSearch=`0` &tplResult=`results` &grabMax=`10` &showInputForm=`0` &extract=`1:content,description,introtext` &order=`pagetitle` &rank=pagetitle:90,description:60,introtext:30,content`!]