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

Php Drupal 8-核心搜索模块,更改标记,php,drupal,drupal-theming,drupal-8,drupal-templates,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>', ); } if(计数($

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

\core\modules\search\src\Controller\SearchController.php中的第119行

if (count($results)) {
   $build['search_results_title'] = array(
        '#markup' => '<h2>' . $this->t('Search results') . '</h2>',
    );
}
if(计数($results)){
$build['search\u results\u title']=数组(
“#markup'=>”.$this->t('Search results')”,
);
}
我想从我的搜索页面中删除“搜索结果”H2

我可以使用搜索表单上的预处理表单功能和搜索结果列表上的预处理搜索结果来更改H2上方的搜索表单和下方的结果列表


是否缺少预处理函数im,或者我可以使用自定义细枝模板?

您可以覆盖item-list--search-results.html.twig,并替换标题,如下所示:

  {%- if title is not empty -%}
    <h3>{{ title }}</h3>
  {%- endif -%}
{%-如果标题不为空-%}
{{title}}
{%-endif-%}

只要去掉h3

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

  • mymodule.services.yml
    文件中定义以下内容:
  • 最后,控制器本身位于/mymodule/src/controller/mymodulesarchcontroller.php上
  • 名称空间Drupal\mymodule\Controller; 使用Drupal\search\SearchPageInterface; 使用Symfony\Component\HttpFoundation\Request; 使用Drupal\search\Controller\SearchController; /** *覆盖路线控制器以进行搜索。 */ 类MyModuleSearchController扩展了SearchController{ /** *{@inheritardoc} */ 公共功能视图(请求$Request,SearchPageInterface$实体){ $build=parent::view($request,$entity); //取消设置结果标题。 如果(isset($build['search\u results\u title'])){ 取消设置($build['search\u results\u title']); } 返回$build; } }
    来自@hugronaphor的解决方案非常有效。 我希望我的搜索结果标题是“SearchResults for'(searchterm)”,而不仅仅是“SearchResults”,而@hugronaphor所描述的步骤正是这样做的

    在我看来,我认为:

    if (isset($build['search_results_title']) && isset($_GET['keys'])) {
       $build['search_results_title'] = ['#markup' => '<h2>' . t('Search results for') . ' "' . $_GET['keys'] . '"</h2>'];
    }
    
    if(isset($build['search\u results\u title')和&isset($\u GET['keys')){
    $build['search_results_title']=['#markup'=>''.t('search results for')。$\u GET['keys'].'];
    }
    
    您正在谈论另一个模板。线程启动者实际上想知道如何操作搜索页面控制器的输出。由于键为“search\u results\u title”的渲染数组是简单的标记,并且没有主题排序器类型键,因此需要直接操作控制器输出。 /** * @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'); } } } 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; } }
    if (isset($build['search_results_title']) && isset($_GET['keys'])) {
       $build['search_results_title'] = ['#markup' => '<h2>' . t('Search results for') . ' "' . $_GET['keys'] . '"</h2>'];
    }