Answers:
您可以覆盖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()。在您只需要编辑传递到模板文件的值的情况下,它们很有用。
在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>
最近,我在Drupal 7体系结构网站上花费了大量时间来处理搜索结果,并决定使用Display Suite模块。
Display Suite模块具有一种控制搜索结果的绝妙方法:它将使您可以轻松地在搜索结果中使用预告片。这是该模块的维护者编写的教程,着重于将其用于搜索结果。
与Drupal一样,有多种方法可以完成相同的操作。我喜欢这种方法,因为它允许我按内容类型细分结果。