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 更改上面的搜索表单和结果列表。
是否有我错过的预处理功能,或者我可以使用自定义模板文件吗?
您必须更改搜索模块定义的路线。为此:
mymodule.services.yml
以下内容:服务: mymodule.route_subscriber: 类:Drupal\mymodule\Routing\RouteSubscriber 标签: - {名称:事件订阅者}
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'); } } }
<?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']); } 返回$构建; } }