Drupal 8 — основной модуль поиска, изменение разметки

Как я могу изменить эту разметку из моего файла .theme?

Строка 119 в \ core \ modules \ search \ src \ Controller \ SearchController.php

if (count($results)) {
$build['search_results_title'] = array(
'#markup' => '<h2>' . $this->t('Search results') . '</h2>',
);
}

Я хочу удалить «Результаты поиска» H2 со своей страницы поиска.

Я могу изменить форму поиска выше и список результатов ниже H2, используя функцию _preprocess_form в форме поиска и preprocess_search_result в результатах поиска.

Есть ли какая-то функция препроцесса, которую мне не хватает, или я могу использовать собственный шаблон веточки?

2

Решение

Вы должны изменить маршрут, определенный поисковым модулем.
Для этого:

  1. Определите в своем mymodule.services.yml файл следующий:

Сервисы:
mymodule.route_subscriber:
класс: Drupal \ mymodule \ Routing \ RouteSubscriber
теги:
- {name: event_subscriber}

  1. Создайте класс, который расширяет RouteSubscriberBase Класс на /mymodule/src/Routing/RouteSubscriber.php выглядит следующим образом:

/ **
* @файл
* Содержит \ Drupal \ mymodule \ Routing \ RouteSubscriber.
* /

пространство имен Drupal \ mymodule \ Routing;

использовать Drupal \ Core \ Routing \ RouteSubscriberBase;
использовать Symfony \ Component \ Routing \ RouteCollection;

/ **
* Слушает динамический маршрут событий.
* /
Класс RouteSubscriber расширяет RouteSubscriberBase {

/ **
* {@inheritdoc}
* /
публичная функция alterRoutes (RouteCollection $ collection) {
// Заменим динамически созданный контроллер маршрута "search.view_node_search"
// со своим
if ($ route = $ collection-> get ('search.view_node_search')) {
$ route-> setDefault ('_ controller', '\ Drupal \ mymodule \ Controller \ MyModuleSearchController :: view');
}
}
}

  1. Наконец, сам контроллер расположен в /mymodule/src/Controller/MyModuleSearchController.php

пространство имен Drupal \ mymodule \ Controller;

использовать Drupal \ search \ SearchPageInterface;
использовать Symfony \ Component \ HttpFoundation \ Request;
использовать Drupal \ search \ Controller \ SearchController;

/ **
* Переопределить контроллер маршрута для поиска.
* /
Класс MyModuleSearchController extends SearchController {

/ **
* {@inheritdoc}
* /
публичное представление функции (Request $ request, SearchPageInterface $ entity) {
$ build = parent :: view ($ request, $ entity);
// Сброс заголовка результата.
if (isset ($ build ['search_results_title'])) {
снята с охраны ($ построить [ 'search_results_title']);
}

вернуть $ build;
}

}

2

Другие решения

Решение от @hugronaphor работает отлично.
Я хотел, чтобы заголовок моих результатов поиска был «Результаты поиска для ‘(searchterm)» «, а не просто» Результаты поиска «, и шаги, описанные @hugronaphor, сделали именно это.

На мой взгляд, функция я поставил это:

if (isset($build['search_results_title']) && isset($_GET['keys'])) {
$build['search_results_title'] = ['#markup' => '<h2>' . t('Search results for') . ' "' . $_GET['keys'] . '"</h2>'];
}
0

Вы можете переопределить item-list — search-results.html.twig и заменить заголовок здесь:

  {%- if title is not empty -%}
<h3>{{ title }}</h3>
{%- endif -%}

Просто удали это h3.

-1
По вопросам рекламы [email protected]