Drupal 8 - 核心搜索模块,更改标记

时间:2016-04-14 14:14:27

标签: php drupal drupal-theming drupal-8 drupal-templates

如何从.theme文件更改此标记?

\ core \ modules \ search \ src \ Controller \ SearchController.php

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

我想从搜索页面中删除“搜索结果”H2。

我可以使用搜索表单上的_preprocess_form函数和搜索结果上的preprocess_search_result更改上方的搜索表单和H2下方的结果列表。

是否缺少预处理功能或者我可以使用自定义树枝模板吗?

3 个答案:

答案 0 :(得分:2)

您必须更改搜索模块定义的路线。 为此:

  1. mymodule.services.yml文件中定义以下内容:
  2. 
        services:
          mymodule.route_subscriber:
          class: Drupal\mymodule\Routing\RouteSubscriber
          tags:
            - { name: event_subscriber }
    
    
    1. 创建一个扩展/mymodule/src/Routing/RouteSubscriber.php上RouteSubscriberBase类的类,如下所示:
    2. 
          /**
           * @file
           * Contains \Drupal\mymodule\Routing\RouteSubscriber.
           */
      
          namespace Drupal\mymodule\Routing;
      
          use Drupal\Core\Routing\RouteSubscriberBase;
          use Symfony\Component\Routing\RouteCollection;
      
          /**
           * Listens to the dynamic route events.
           */
          class RouteSubscriber extends RouteSubscriberBase {
      
            /**
             * {@inheritdoc}
             */
            public function alterRoutes(RouteCollection $collection) {
              // Replace dynamically created "search.view_node_search" route's Controller
              // with our own.
              if ($route = $collection->get('search.view_node_search')) {
                $route->setDefault('_controller', '\Drupal\mymodule\Controller\MyModuleSearchController::view');
              }
            }
          }
      
      
      1. 最后,控制器本身位于/mymodule/src/Controller/MyModuleSearchController.php
      2. 
            namespace Drupal\mymodule\Controller;
        
            use Drupal\search\SearchPageInterface;
            use Symfony\Component\HttpFoundation\Request;
            use Drupal\search\Controller\SearchController;
        
            /**
             * Override the Route controller for search.
             */
            class MyModuleSearchController extends SearchController {
        
              /**
               * {@inheritdoc}
               */
              public function view(Request $request, SearchPageInterface $entity) {
                $build = parent::view($request, $entity);
                // Unset the Result title.
                if (isset($build['search_results_title'])) {
                  unset($build['search_results_title']);
                }
        
                return $build;
              }
        
            }
        
        

答案 1 :(得分:0)

@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>'];
}

答案 2 :(得分:-1)

您可以覆盖item-list - search-results.html.twig,并在此处替换标题:

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

删除那个h3。