核心搜索模块,更改标记

Pat*_*ick 4 php drupal drupal-templates drupal-theming drupal-8

我想从 core/modules/search/src/Controller\SearchController.php 的第 119 行删除搜索页面中添加的搜索结果字符串。

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

我可以使用搜索表单上的 preprocess_form 函数和搜索结果上的 preprocess_search_result 更改上面的搜索表单和结果列表。

是否有我错过的预处理功能,或者我可以使用自定义模板文件吗?

hug*_*hor 5

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

  1. 在您的文件中定义mymodule.services.yml以下内容:
    服务:
      mymodule.route_subscriber:
      类:Drupal\mymodule\Routing\RouteSubscriber
      标签:
        - {名称:事件订阅者}

  1. 创建一个扩展RouteSubscriberBase/mymodule/src/Routing/RouteSubscriber.php 上的类的类,如下所示:
<?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
<?php
    命名空间 Drupal\mymodule\Controller;
    
    使用 Drupal\search\SearchPageInterface;
    使用 Symfony\Component\HttpFoundation\Request;
    使用 Drupal\search\Controller\SearchController;
    
    /**
     * 覆盖路由控制器进行搜索。
     */
    类 MyModuleSearchController 扩展 SearchController {
    
      /**
       * {@inheritdoc}
       */
      公共函数视图(请求$请求,SearchPageInterface $实体){
        $build = 父级::view($request, $entity);
        // 取消设置结果标题。
        if (isset($build['search_results_title'])) {
          取消设置($build['search_results_title']);
        }
    
        返回$构建;
      }
    
    }