如何自定义搜索结果页面?


39

我已经为我的内容类型和页面视图定制了预告片视图。现在,我需要将预告视图用于搜索结果页面。默认情况下,Drupal会为每个结果显示一个混乱的全文,我需要能够自定义每种内容类型的外观。我不想更改drupal如何获得结果,只是如何显示结果。

Answers:


28

您可以覆盖theme_search_results()或theme_search_result()。

第一个是为搜索结果页面调用的主题函数,而第二个是为呈现单个结果而调用的主题函数。这两个主题功能都使用模板文件(第一种情况下为search-results.tpl.php,第二种情况下为search-result.tpl.php)。

search-result.tpl.php将$info_split['type']在Drupal 6中使用,其中包含节点类型。在最新的Drupal 7版本中,$info_split['type']不再通过,但是search-result.tpl.php仍然会获得$result['node'],如果是对节点进行搜索的话;$result['node']->type然后是节点的内容类型。

请注意,Drupal 7及更高版本允许模块实现hook_search_page(),但这是与Search模块集成的模块使用的钩子,而不是要更改结果页面以获取另一个模块返回的结果的模块使用的钩子模块。
同样,在Drupal 7上,每个主题函数都使用一个预处理函数,在这种情况下,它将是hook_preprocess_search_results()hook_preprocess_search_result()。在您只需要编辑传递到模板文件的值的情况下,它们很有用。


有没有一种方法可以使用视图或面板来显示主题搜索结果?
2012年1

@jan您可以使用暴露的过滤器将视图替换为视图。
kiamlaluno

@kiamlaluno,我希望可以使用视图将drupal的默认搜索选项作为主题。因为我不会使用公开的过滤器,而只使用默认的搜索选项。
2012年1

@jan如果使用视图,则整个搜索页面将替换为视图。这就是为什么您需要至少公开一个视图过滤器的原因:这就是用户用来输入搜索字词的原因。视图只是节点列表,并且过滤器用于过滤将在页面中显示的节点。
kiamlaluno

@kiamlaluno你是对的。为什么我没有考虑呢!谢谢
2013年

18

在Drupal 7中,您使用...

...修改结果中显示的信息。

你用...

...以自定义结果的标记。

这是如何使用内容类型的预告片作为搜索结果的示例。下一个代码片段位于主题的template.php中

/**
 * Implements template_preprocess_search_result
 * @param type $vars
 */
function MYTHEME_preprocess_search_result(&$vars) {
  $node = $vars['result']['node'];
  if ($node->nid) { // if the result is a node we can load the teaser
    $vars['teaser'] = node_view($node, 'teaser'); 
  }
}

此代码段是search-result.tpl.php文件:

<article>
  <?php if ($teaser) : // for nodes we can use the teaser as search result ?>
    <?php print drupal_render($teaser); ?>
  <?php else : // for other results we use the default from core search module ?>  
    <?php print render($title_prefix); ?>
    <h3><a href="<?php print $url; ?>"><?php print $title; ?></a></h3>
    <?php print render($title_suffix); ?>
    <?php if ($snippet) : ?>
      <p><?php print $snippet; ?></p>
    <?php endif; ?>
  <?php endif; ?>
  <?php if ($info): ?>
    <footer><?php print $info; ?></footer>
  <?php endif; ?>
</article>

1
关于此线程的最佳解释。
digitgopher 2015年

9

最近,我在Drupal 7体系结构网站上花费了大量时间来处理搜索结果,并决定使用Display Suite模块。

Display Suite模块具有一种控制搜索结果的绝妙方法:它将使您可以轻松地在搜索结果中使用预告片。这是该模块的维护者编写的教程,着重于将其用于搜索结果。

与Drupal一样,有多种方法可以完成相同的操作。我喜欢这种方法,因为它允许我按内容类型细分结果。


1
我知道这个答案来自2012年,但是我注意到在模块页面上它说Drupal 8现在不包含搜索功能。这表明,如果您想要某种将来的证明,那么这对于Drupal 7可能不是最好的选择。 。不过,这不是我自己测试的结果,请注意。
ja_him
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.