Живой поиск на Drupal

Здарова, щеглы! Сегодня я вам расскажу, как сделать живой поиск на друпал. Для этого нам понадобятся:

Скачиваем и включаем все эти модули вручную или по-нормальному через 

drush en search_api search_api_db search_api_pages search_api_live_results -y

 
 

Затем идём в "Конфигурация - Поиск и метаданные - Search API - Добавить сервер" и заполняем там поля, как показано на картинке. Поле "минимальная длина слова" определяет, после ввода скольких символов будут появляться результаты. Один символ - это насилие над базой данных, а вот 3-5 - в самый раз. Галочка "Искать по частичным совпадениям" означает, что поиск будет вестись по фрагментам слов. Если её не выставить, то результаты будут находиться только по целым словам, что не всегда удобно. Теперь, когда у нас есть сервер, можно создать поисковый индекс. Идём аналогично - "Конфигурация - Поиск и метаданные - Search API - Добавить индекс" и заполняем там поля следующим образом: имя - любое вменяемое имя, машинное имя, согласно правилам для машинных имён drupal, "Тип элемента" - тип сущности (материал(нода), термин таксономии и т.д. Тут как правило, имеет смысл выбирать именно материал, если у вас есть например связанные продукты commerce - их поля потом можно будет также добавить. "Наборы" - выбираем те типы материалов, которые собираемся индексировать. Тут важно не забыть никакой тип, но и не ставить галочки туда, куда не надо, чтобы не захламлять базу данных. В поле "Сервер" выбираем наш только что созданный сервер. "Только чтение" - не трогаем, оставляем невыбранным. "Проиндексировать элементы сразу" - выставляем обязательно. Если не выставить, то новые материалы в индексе будут появляться только по крону, если же выставить, то любые изменения будут индексироваться сразу. "Cron batch size" - оставляем, как есть - 50. Это означает, что если есть что-то неиндексированное, то по крону будет индексироваться по 50 элементов. Сорри, что не сделал скрин - он был бы слишком длинный и не очень информативный :) 

После нажатия кнопки сохранить нас перебросит на форму добавления полей в индекс. Я обычно выбираю в добавок ко всему остальному тип материала и ID. Для живого поиска выбираем заголовок и Body. Если у вас есть ещё какие-то важные текстовые поля, выберите и их. Важно: выбирайте для текстовых полей тип Fulltext, т.к. в Fulltext можно производить поиск по фрагментам текста. Однако, Fulltext не позволяет делать сортировку, для этого нужен тип "Строка". Если же вы хотите искать и сортировать по одному и тому же полю, то это можно настроить на вкладке "Фильтры" в настройках поискового индекса, но об этом я расскажу как-нибудь в следующий раз :) 

Если вы ищете в полях Body, не отчаивайтесь. Текст с форматом ввода - это сложносоставное поле, поэтому его нужно добавлять как связанное поле. Да-да, вот там внизу кнопка "Добавить связанные поля". Но прежде чем жать эту кнопку, сохраните форму, иначе внесённые изменения потеряются! Такая вот засада. На этом с поисковым индексом пока всё.

Теперь нам нужна форма поиска для нашего поискового индекса. Стандартная форма нам не подходит, т.к. это вообще другой поиск. К слову, при использовании Search API стандартный модуль поиска Search лучше отключить и анинсталлить. А для формы поиска нам нужен модуль Search API Pages. Идём в "Конфигурация - Поиск и метаданные - Search API - Страницы поиска - Добавить страницу поиска". Там всё просто - вводим заголовок поисковой страницы и её путь, выбираем наш поисковый индекс, остальное по вкусу и согласно здравому смыслу.

И последний шаг - включить живой поиск. Для этого идём на страницу редактирования поискового индекса, заходим на вкладку Live Results и ставим галочку напротив недавно созданной страницы поиска. Сохраняемся. Если нажать "Изменить", то можно задать количество выпадающих результатов и тип отображения - просто кликабельное название либо стиль отображения live results search. К слову, этот стиль отображения полностью настраивается в настройках отображения материала, а также есть шаблон для него, который можно найти в папке модуля. Естественно, для переопределения шаблона надо скопировать его в свою тему.

Форма поиска доступна как блок на странице управления блоками. Также её можно вызвать программно:

<?php
 $search_page
= entity_load_single('search_api_page', 1);
 
$search_form = drupal_get_form('search_api_page_search_form_search', $search_page);
?>

Поздравляю! Теперь ваш сайт стал чуточку менее колхозным, ведь около 100% разработчиков практически не волнуются о том, как работает окошко поиска на сайте, в результате чего оно не всегда работает в принципе. А если вы сделали всё по инструкции, то у вас должна получиться красота такая же, как на картинке в начале статьи. Ну само собой, что надо ещё немного поверстать, чтобы оно смотрелось нормально.

PS: на всякий случай, не надо путать live results и автокомплит, т.к. у них в корне разное поведение. Если по клику на живой результат вы переходите на его страницу, то по клику на вариант из автокомплита этот вариант просто вставляется в окно ввода текста и это логично, ведь автодополнение должно просто помогать вводить данные и ничего более.

Поделиться: