Как я могу изменить эту разметку из моего файла .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 в результатах поиска.
Есть ли какая-то функция препроцесса, которую мне не хватает, или я могу использовать собственный шаблон веточки?
Вы должны изменить маршрут, определенный поисковым модулем.
Для этого:
mymodule.services.yml
файл следующий:Сервисы: mymodule.route_subscriber: класс: Drupal \ mymodule \ Routing \ RouteSubscriber теги: - {name: event_subscriber}
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'); } } }
пространство имен 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; } }
Решение от @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>'];
}
Вы можете переопределить item-list — search-results.html.twig и заменить заголовок здесь:
{%- if title is not empty -%}
<h3>{{ title }}</h3>
{%- endif -%}
Просто удали это h3.