Drupal: taxonomy, Views, поиск и фасетная фильтрация

Оглавление

Настройка сортировки на Drupal 7 или Фасетный поиск

Умный фильтр или Фасетный поиск — это фильтр по категориям товара , которую можно видеть в крупных интернет магазинах  и том же яндекс.маркете. Он помогает последовательно сортировать товары с нужными пользователю свойствами, отсеявая все лишнее. Это очень удобная опция, позволяющая быстро найти нужный товар или материал на сайте.

И так давайте  перейдем непосредственно к установке и настройке нужных нам модулей

Установка модулей

Для начала нам понадобятся скачать и установить следующие модули: Search APISearch API Database SearchEntity API и Views.

На странице модулей включаем:

  • Search API
  • Search views
  • Database search
  • Entity API
  • Views
  • Views UI
  • Ctools

Создание поискового сервера

Идем в Конфигурация > Поиск и метаданные > Search API  (/admin/config/search/search_api) и нажимаем Добавить сервер.

Затем вводим имя сервера, в выпадающем списке Класс сервиса (Service class) выбираем Database service и сохраняем.

Сервера, Web и не только

Создание индекса

Идем в Конфигурация > Поиск и метаданные > Search API  (/admin/config/search/search_api), жмем Добавить сервер (Add index).

Вводим название индекса, в поле Тип элемента (Item type) выбираем ‘Материал‘, в поле Сервер выбираем Database server, жмем Создание индекс.

Сервера, Web и не только

В открывшейся форме отмечаем галочками поля, по которым будет производится сортировка, и сохраняемся.

Чтобы можно было делать сортировку по названию ноды, включаем title и напротив него в выпадающем списке выбираем тип string, а не fulltext. По fulltext сортировку делать нельзя.

Сервера, Web и не только

В следующей открывшейся форме Фильтры (workflow) я оставил все по умолчанию,  переходим на вкладку Просмотр (Status), и нажимаем Индексировать сейчас (Index Now).

После завершения индексации, создадим страницу поиска.

Сервера, Web и не только

Создание страницы поиска

Идем в Structure > Views и жмем Добавить новое представление (Add new view).

В новом представление в выпадающем списке Показать (Show) выбираем ранее созданный нами индекс, остальные поля (название, title и путь) заполняете так как вам нужно.

Сервера, Web и не только

Далее нажимаем Сохранить и настроить (Continue & edit), настраиваем представление как обычно. В критериях фильтрации я добавил показ только опубликованных материалов и нужный тип node и настроил отображение необходимых полей (нужно добавить эти поля в индекс, чтобы иметь возможность фильтровать по ним).

Сервера, Web и не только

На данном этапе с настройкой представления мы закончили, теперь перейдем непосредственно к фасетному фильтру.

Скачиваем модуль Facet API, устанавливаем его, и на странице модулей включаем два модуля: Facet API и Current Search Blocks. Последний создает блок с со списком активных фильтров и ссылки для их отмены. Также ключаем модуль Search facets он понадобится для интеграции ранее настроенного поиска и facet API.

Теперь идем в Конфигурация > Поиск и метаданные > Search API > Product Index (/admin/config/search/search_api/index/product_index/facets), здесь у нас появилась новая вкладка Фасеты (Facets), где нужно указать поля (проиндексированные ранее) для фильтра и настроить их отображение.

Сервера, Web и не только
Сервера, Web и не только

Для каждого от меченого поля будет автоматически создан отдельный блок на странице блоков, так что после того как нужные поля выбраны, идем на страницу блоков и размещаем их в нужном регионе и последовательности.

Сервера, Web и не только

Current Search Blocks

На странице настройки блоков находим блок Current search: Standard и размещаем его в нужном нам месте. Затем идем в Конфигурация > Поиск и метаданные > Current Search Block > Standart, и в самом низу находим настройки видимости: ставим либо предпоследний , либо последний пункт (Display when either keywords are entered one or more facet items are active).

Сервера, Web и не только

Отображение фильтра на произвольной странице (отличной от страницы поиска)

По умолчанию блок с ссылками фильтра будет отображается только на странице поиска, но чаще всего нужно, чтобы этот блок также отображался и на других страницах. Сделать это просто, хотя и не очевидно. Идем в  ранее созданное нами представление, и добавляем в нем блок — Facets block.

Сервера, Web и не только

В настройках блока указываем:

  • Hide block: Yes
  • Search page path: путь к странице поиска
  • Facet field: выбираем любое поле
Сервера, Web и не только

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

Смысл этих действий прост: чтобы блоки фильтра могли отображатся, им нужно получить информацию из базы данных. Вспомогательный блок как раз и производит этот запрос.

Множественный выбор (чекбоксы в фильтре)

Чтобы можно было выбрать одновременно несколько пунктов или категорий в нашем фильтре. Нужен модуль search api db. Поэтому скачиваем и устанавливаем его, после чего в настройках виджета меняем ‘ссылки’ на ‘ссылки с чекбоксами’, а оператор должен быть в положение  ‘AND’.

Сервера, Web и не только
Сервера, Web и не только

Теперь в блоке фильтра можно выбирать несколько катигорий сразу:

Сервера, Web и не только

Патчим Jquery UI Slider: исправляем выбор значений

Сервера, Web и не только

Для выбора диапазона цен существует хороший модуль Search Api ranges, который интегрирует jQuery UI min/max slider в наш фильтр.
По умолчанию модуль имеет странное поведение — диапазон можно только уменьшить, но не увеличить, что несколько не удобно. Существует патч, который исправляет данный недочет. Я применял патч для версии 7x-1.5.
Страница обсуждения проблемы: https://drupal.org/node/1989776
Сам патч: http://drupalcode.org/project/search_api_ranges.git/commitdiff/433bbcd?h…

				
					--- a/search_api_ranges.module
+++ b/search_api_ranges.module
@@ -144,11 +144,8 @@ function search_api_ranges_minmax($variables, $order = 'ASC') {
// otherwise our min/max would always equal user input.
$filters = &$query->getFilter()->getFilters();
foreach ($filters as $key => $filter) {
-
- // Check for array: old style filters are objects which we can skip.
- if (is_array($filter)) {
- if ($filter[0] == $variables['range_field'] || ($filter[0] != $variables['range_field'] && $filter[2] == '<>')) {
- $current_filter = $filters[$key];
+ if( isset($filter->tags) && is_array($filter->tags) ){
+ if( in_array('facet:'.$variables['range_field'], $filter->tags) ){
unset($filters[$key]);
}
}
				
			

Патчим JQuery UI Slider: настраиваем редирект

В версии модуля 7х-1.5 я столкнулся с тем, что если виджет слайдера расположен на странице, отличной от страницы поиска, то после изменения диапазона цены проиходило пере направление на текущую страницу, а не на страницу поиска.
Ошибка кроется в функии search_api_ranges_block_slider_view_form_submit() (файл search_api_ranges.module, строка 364).

Я не стал особо разбираться, что там и зачем, просто немного изменил код в строке 427:

				
					<blockquote>
<div class="codeblock">
<pre>-     drupal_goto($path, array('query' => array($params), 'language' => $language));
+    drupal_goto($values['path'], array('query' => array($params), 'language' => $language));</pre>
</div></blockquote>
				
			

после чего проблема решилась.

Новостная лента / лента статей / лента анонсов статей в CMS Drupal

Для создания новостной ленты используем таксономию. Таксономия предназначена для упорядочивания статей сайта в независимости от того, к какому типу материала принадлежит статья.

  1. Для этого перейдём на страницу администрирования вашего сайта, выбрав в боковом меню — “Управление”. Перейдём по ссылке — “Модули” на страницу управления модулями сайта и активируем модуль – “Taxonomy” (если он у Вас отключен).
  2. Вернемся на страницу администрирования вашего сайта, выбрав в боковом меню — “Управление”. Перейдём по ссылке — “Таксономия” на страницу управления таксономией на сайте и нажмём ссылку – “Добавить словарь”. Добавим новый словарь в соответствии с изображением ниже.
Сервера, Web и не только
Где “Типы материалов” – типы материалов при создании или отображении которых будет выводится данный словарь содержащий список лент анонсов статей к которым может принадлежать данная статья. Так же в настройках словаря можно выбрать:
  • “Множественный выбор“ – для того, что бы ваша статья могла относится кнескольким лентам анонсов статей, например, относит как к ленте анонсов статейоб автомобилях, так и к ленте анонсов статей о хобби
  • “Обязательно” – для того, что бы вновь создаваемая статья обязательно относиласьк какой либо ленте анонсов статей.
  • “Теги” — для того, что бы при создании новой статьи, автор мог сам создавать нужную ленту анонсов статей, если она не существует.
  1. После создания нового словаря Вы будете перенаправлены на страницу управления таксономией на сайте.
Сервера, Web и не только
  1. Нажмём на ссылку – “добавить термин”, для добавления новой ленты анонса статей и добавьте новую ленту анонса статей.
  2.  Перейдём на страницу добавления материалов (статей) на ваш сайт, выбрав в боковом меню — “Создать материал”. Создадим материал типа — “Новости”. При создании нового материала (статьи) Вы увидите на странице создания нового материала новый пункт – “Контейнер для лент анонсов статей, типа — новости”. В этом пункте, вы можете выбрать, к какой именно ленте анонсов статей будет принадлежать данная статья (в данном случае у нас только 1 лента анонсов статей – “Новостная лента сайта”, добавленная вами в предыдущем пункте).
  3.  Добавим 3-4 статьи типа “Новости” с указанием их привязки к ленте анонсов статей – “Новостная лента сайта”.
  4. Исправим (свяжем её с лентой анонсов статей) созданную ранее новость связанную с меню. Это можно сделать 2 способами:
    • выбрать в созданном вами меню сайта, созданный вами пункт меню связанный с данной статьёй и на странице отображения статьи перейдём по ссылке – “Изменить” и изменим статью.
    • вернёмся на страницу администрирования вашего сайта, выбрав в боковом меню — “Управление”. Перейдём по ссылке — “Содержание” на страницу управления статьями на сайте и напротив нужной вам статьи нажмём ссылку – “изменить”. После чего изменим статью.18. В анонс, ленты анонса статей, попадает первый абзац статьи.
  5. Создадим для вашей ленты анонсов статей пункт в созданном вами меню. Для этого вернёмся на страницу администрирования вашего сайта, выбрав в боковом меню — “Управление”. Перейдём по ссылке — “Таксономия”. На странице управления таксономией на сайте, перейдём по ссылке – “список терминов”, напротив вашего словаря таксономии. Нажмём на имя вашего термина, Вы будете перенаправлены на страницу отображения данных, данного термина (на страницу отображения новостной ленты сайта). Запомним URL данной страницы (http://mysite.ru/taxonomy/term/1).

Сервера, Web и не только
  1. Вернёмся на страницу администрирования вашего сайта, выбрав в боковом меню — “Управление”. Перейдём по ссылке — “Меню”. На странице управления меню сайта, нажмём на имени созданного нами меню сайта, для его просмотра. На странице просмотра созданного вами меню сайта перейдём по ссылке – “добавить пункт”. Добавим новый пункт указав при его создании:
    • путь – “taxonomy/term/1” (это производная пути от http://mysite.ru/taxonomy/term/1, так как это ссылка внутри сайта, то URL сайта (http://mysite.ru/) указывать ненужно)
    • название ссылки в меню – “Новостная лента сайта” (название на ваше усмотрение)
    • родительский пункт – “Меню сайта” (созданное вами меню сайта)
  2. На рисунке ниже изображена создаваемая вами лента анонсов статей.
Сервера, Web и не только

Поиск в Drupal с помощью Views

Стандартный поиск в Drupal довольно ограничен и имеет минимум настроек. Модуль Custom Search способен немного расширить арсенал настроек для стандартного поиска , но некоторые вещи не под силу даже ему, к примеру изменить количество результатов поиска на страницу, добавить дополнительные поля для вывода на странице результатов поиска и т.д.

Если вы на ты с кодом можно конечно отредактировать сам модуль поиска который находиться по следующему пути — ваш_сайт/modules/search/ там в файле search.pages.inc можно добавлять переменные, а в файле search-result.tpl.php править их вывод предварительно скопировав его в папку вашей темы.

Но на мой взгляд существует более изящный выход из данной ситуации  — оставить модулю Search функцию индексирования, а поиск по индексу и вывод результатов возложить на модуль Views:

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

Option Value
Имя представления Search page
Машинное имя search_page
Показать Содержание типа Все отсортировано по несортированный
Заголовок страницы Search page
Путь search-page
Формат отображения Неформатированный список (по умолчанию)

После сохранения получаем следущий результат

Сервера, Web и не только

Добавляем новый фильтр в «Критерии фильтрации» найдите фильтр «Поиск: Термины поиска» и нажмите на кнопку «Применить (все отображения)».

Сервера, Web и не только

На странице конфигурации фильтра, поставьте флажок напротив «Раскрыть этот фильтр для посетителей и позволить его изменять.» и нажмите на кнопку «Применить (все отображения)».

Сервера, Web и не только

Все, что мы на самом деле сделали добавлен «Поиск: Термины поиска» фильтр и экспонировали его так, чтобы пользователи могли войти в ключевые слова для поиска. В текстовом поле появится над просмотров страницы.

На данный момент, у нас есть страница , рабочий просмотры. Сохранить вид, и перейти к / с поиском страницы .

Если ввести в некоторых ключевых слов в «Поисковые запросы» текстовое поле, страница должна возвращать некоторые результаты.

Сервера, Web и не только

Назначение блока к региону

Вы можете заметить, что фильтр не отображается над областью контента, это потому, что теперь подвергается как блок. Последний бит работы нам нужно сделать, это добавить в открытый блок фильтра в область, в рамках темы.

  1. Перейдите в раздел Структура -> блоки и присвоить «разоблачил форму: search_page-страницы» блокировать конкретный регион.
Сервера, Web и не только
  1. Теперь, если вы идете на страницу поиска, фильтр должен быть в назначенном блоке
Сервера, Web и не только

Последний бит требуемой работы является стиль результатов поиска. Но, как вы видели, это довольно легко создать страницу пользовательского поиска, используя только просмотров и модуль поиска.

Сервера, Web и не только

Результат:

Сервера, Web и не только

Вывод описания термина таксаноми ( taxonomy term ) в Drupal 7

Добрый день, сегодня мы поговорим о том как вывести описание термина таксаноми на странице словаря таксаномии. И так многие начинающие пользователи Drupal создав свой словарь таксаномии и наполнив его терминами, хотели бы выводить уникальное описание для каждого термина, тем более что на странице термина ( к примеру: ваш_сайт.ru/taxonomy/term/1) нажав на ссылку Редактировать мы увидем поле для ввода текста как и в любом типе материалов, но введя в это поле текст в любом формате по умолчанию на странице термина он выводиться не буде:

Сервера, Web и не только

Но как известно не поправимых ситуаций не бывает нужно лишь желание, давайте разберемся и с нашей ситуацией. Первым делом перейдем к папке модуля Views который находиться по следующему адресу: /sites/all/modules/views находим и копируем из той папки фаил views-view.tpl.php так как изменения которые мы хотим сделать будут касаться только представления Taxonomy term, можно переименовать фаил views-view.tpl.php в views-view—taxonomy-term.tpl.php . После выполнения всех выше описанных действий откройте ваш фаил любым текстовым редактором и в его начале вставте следующий код:

				
					<?php if (!isset($_GET['page'])) {
$category = taxonomy_term_load(arg(2));
echo "{$category->description}";
} ?>
				
			

Сохраняем фаил и переносим его в Вашей теме в папку Templates ( /sites/all/themes/название Вашей темы/templates ).

Но это еще не все, вернемся к выше упомянутому представлению Taxonomy term, на странице Представления ( /admin/structure/views ) проверяем включено ли представление Taxonomy term если нет включаем и переходим к его редактированию.

Сервера, Web и не только

В разделе Расширеных настроек перейдите по ссылке «Тема оформления: Информация»

Сервера, Web и не только

В появившемся окне нажмите кнопку — Пересканировать файлы шаблонов:

Сервера, Web и не только

После сохраняем представление и переходим к добавлению уникальных описаний к вашим терминам таксаномии и проверке результатов.

На этом все, надеюсь статья была Вам полезна.

Это если через Taxonomy display выводится. А если просто подменой на вьюс, то описание не будет показываться.
Свежие записи
Команда RD

Команда RD и RMDIR позволяют удалять как каталоги, так и

Команда RENAME

RENAME что это? Команда RENAME позволяет переименовать файл или каталог.

Команда MD

Команда md позволяет создавать каталог или промежуточные каталоги в указанном

Разработка сайтов
help2site
Установка и настройка PHP

В прошлой заметке я рассказал, как установить Apache, а сегодня мы поговорим об установке PHP. Как и в случае с Apache здесь нет ничего сложного. Если вы

CMS и сайты
help2site
Защита от спама для любого сайта (JavaScript)

Cегодня мы поговорим про насущную проблему «СПАМ».  Способ решения данной проблемы позволит избавиться от спама на форме обратной связи, спам на комментарии или же спам на заказы в интернет магазине. Хотелось

Серверы и администрирование
help2site
Добавить нового клиента в Bill manager

Входим в Bill manager, переходим в пункт меню Клиент—> Клиенты —> иконка Создать Откроется форма Регистрации клиента, вносим данные Клиента Добавим нового клиента в соответствующую

SEO и диагностика сайтов
help2site
Оптимизация сайта. Внутренняя и внешняя

Оглавление Сайт: внутренняя оптимизация, внешняя оптимизация. Оптимизация сайта – это тема сегодняшней статьи. А если быть точнее – то эта статья будет продолжением предыдущей стать. И в

CMS и сайты
help2site
Как ускорить сайт на WordPress

В этой статье мы поговорим об ускорение времени загрузки сайта на CMS WordPress. Быстрая загрузка сайта необходима не только для удобства пользования сайтом посетителями, но