Поиск через Views Combine fields filter и небольшой модуль

Drupal / 29 июня 2012
/ 1555

Поиск на сайте — чертовски важная штука необходимая пользователям, но к сожалению встроенный поиск в drupal имеет один недостаток: он не ищет по части слова. Хотя эта система поиска формирует индекс, что ускоряет его работу и сам по себе вполне неплох. Вариантов замены есть несколько, но все они имеют ряд недостатков. Один не ищет по части слова, второй требует установку стороннего скрипта и т.д. Можно использовать поиск google или yandex, но они могут по несколько дней индексировать ваши новые статьи. Хотя этот вариант весьма гибкий. Я уже писал как прикрутить поиск google. А пока для себя я решил использовать поиск средствами views. Вариант не идеальный. Началось все с того, что в связи с каким то глюком текущей версии views я установил себе последнюю dev версию этого модуля (views-7.x-3.x-dev) и был приятно удивлен новыми ее возможностями, а именно полем фильтра "Combine fields filter". По названию понятно, что он комбинирует поля ноды. В общем, фильтр позволяет скомбинировать ДВА поля ноды и осуществлять поиск по ним. Если у вас основные поля, это стандартные body и заголовок, то вам подходит этот вариант. Минусы такого поиска естественно в том, что он не индексируется, т.е. для больших сайтов с солидной базой статей он скорее всего не подойдет, так как будет работать медленно. Плюсы в том, что в результатах поиска вы можете вывести ноды в том виде, в каком захотите и он естественно ищет по части слова. К стандартному выводу вьюхи я привязал совсем маленький модулек, который выводит блок поиска на сайте.
Итак, если вы не передумали, то вперед, строем и по шагам.

1. Создаем новое представление. Название любое, показываем содержимое. Включаем птичку "Создать страницу", и ВАЖНО! путь указываем search/search1. Если вам нужен другой путь, как это сделать я опишу ниже. Все остальное как хотите.

Создаем новое представление 

Жмем кнопку "Продолжить редактирование". 

2. Идем в Настройки страницы — меню, делаем вкладку с типом "обычная вкладка", заголовок — "Поиск".

делаем вкладку с типом -  

Если вы хотите чтобы вкладка была первой поставьте в поле "Вес" -10 или даже -100. Чтобы проверить где она расположилась идем на страницу search вашего сайта предварительно сохранив нашу вьюху. 

Вкладка наша будет на стандартной странице поиска, если он у вас установлен конечно.

Вкладка наша будет на стандартной странице поиска 

У меня по умолчанию используется google поиск, поэтому по адресу http://gavzav.name/search мы автоматом попадаем на поиск google. И я решил это именно так и оставить. Но зато первой у нас стоит вкладка нашего поиска.

3. Редактируем дальше нашу вьюху. Идем в "Доступ: Право доступа" — выставляем роль — администратор. Это закроет доступ к нашей вьюхе для обычных пользователей. Зачем? Да просто для того, чтобы они не видели процесс "строительства" и чтобы он им не мешал и не пугал. Важно! Не забудьте вернуть права назад когда все отладите.

4. Поля добавляем любые, какие вам нужны.

5. Cоздаем фильтр. "Критерии фильтрации — добавить". Выбираем "Глобальный: Combine fields filter" — это тот самый новый фильтр, который может осуществлять поиск одновременно по двум полям которые вы укажете. 

Cоздаем фильтр

Раскрываем фильтр, оператор я выбрал "Содержит", для того, чтобы была возможность поиска по части слова. И естественно выделяем поля, по которым необходимо осуществлять поиск. Можно включить птичку "Запоминать последний выбор" — тогда человеку который прошел по ссылке из результатов поиска и вернулся назад не придется снова вводить его поисковую фразу.

Раскрываем фильтр, оператор я выбрал  

Сохраняем.

6. В "Дополнительно" в Стиль формы раскрытых фильтров Заходим в "Базовый" и включаем "Требуется ввод".

Требуется ввод 

Далее в настройках меняем название кнопки на "Поиск"

меняем название кнопки на  

Сохраняем. Теперь на странице нашего поиска будет отображаться только форма ввода поисковой фразы.

7. Далее идем в "Настройки страницы" — "Подвал — Добавить". Выбираем "Глобальный: Result summary"

 Result summary 

Это добавит внизу страницы количество найденных материалов.

Это добавит внизу страницы количество найденных материалов 

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

Я однако отсортировал по двум полям - по количеству просмотров и по счетчику комментариев

Сохраняем нашу вьюху. Здесь пока все.

8. Теперь скачиваем этот модулек: http://gavzav.name/dw/srblock.zip. Предварительно заходим в архив с модулем и открываем в редакторе файл srblock.module. В этом файле нам надо подправить только одну строку в самом низу:

$form_state['redirect'] = 'http://ВАШ.ДОМЕН/search/search1?combine=' . $sResult['mysearch'];

Заменяем ВАШ.ДОМЕН на адрес вашего сайта. У меня получилась такая строка:

$form_state['redirect'] = 'http://gavzav.name/search/search1?combine=' . $sResult['mysearch'];

9. Обратите внимание на адрес в этой строке, а именно на эту часть: search/search1 - это тот же адрес, который мы прописали при создании нашей вьюхи. Если у вас например встроенный поиск вообще не установлен и нет других систем поиска, то вы можете на шаге 1 при создании вьюхи адрес страницы сделать просто search. Тогда пропустите шаг 2, и на шаге 8 кроме вашего домена подправьте путь search/search1 на search. Вот пример строки которая должна получиться для моего сайта:

$form_state['redirect'] = 'http://gavzav.name/search?combine=' . $sResult['mysearch'];

Сохраняем файл и устанавливаем модуль.

10. Идем в блоки, находим новый блок Search Block и включаем его в том регионе, в котором вам надо его показывать.

Вот собственно и все. Модуль этот я переделал из модуля Simple Search оставив в нем только вывод поисковой формы. Кстати модуль вполне неплохой.

comments powered by HyperComments