Главная > Soft > Drupal 8: Как сделать поиск по своему модулю

Drupal 8: Как сделать поиск по своему модулю

Продолжая работать над своим проектом на Drupal 8, понадобилось добавить поиск по своему модулю. Но тут меня снова ждал сюрприз — методы hook_search_info и hook_search_execute использовать не получилось. Они просто не вызывались системой и пришлось разбираться, как это правильно делается. Информация меняется часто и удалось найти только одну статью с подсказкой.

Drupal 8: Как сделать поиск по своему модулю

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

Для того, чтоб начать делать свой поиск, нужно разобраться, как же он работает. Как я уже писал, во многих примерах для Drupal 7 используются hook_search_info и hook_search_execute, но в Drupal 8 использовать их у меня не получилось. Тогда было решено исследовать функционал сайта: поиск по пользователям и содержимому. Через некоторое время были найдены классы: NodeSearch.php и UserSearch.php.

Детальное описание не прилагалось, но разобраться можно.

/**
* Executes a keyword search for users against the {users} database table.
*
* @SearchPlugin(
* id = «user_search»,
* title = @Translation(«Users»)
* )
*/

class UserSearch extends SearchPluginBase implements AccessibleInterface {

user_search - это тип поиска

title — это название в админке

Можно скопировать UserSearch.php в <your module>/Plugin/Search, переименовать файл, имя класса, id и title и можно получить свой простой обработчик для запросов на поиск. Теперь остаётся реализовать метод  public function execute() с тем функционалом, который вам нужен.

Результат поиска — это массив, который состоит из массивов с полями title и link.

Метод access лучше заменить реализацией ниже иначе пользователи не увидят новый тип поиска.

public function access($operation = ‘view’, AccountInterface $account = NULL, $return_as_object = FALSE) {
$result = AccessResult::allowedIfHasPermission($account, ‘access content’);
return $return_as_object ? $result : $result->isAllowed();
}

Главная -> Администрирование -> Конфигурация -> Поиск и метаданные

Drupal 8: Как сделать поиск по своему модулю

 

После  добавления его на страницу поиска у вас должна появиться возможность поиска по вашему модулю.

Categories: Soft Tags: , ,
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.