老葛的Drupal培训班 Think in Drupal
当
Drupal为了搜索来索引一个节点时,它首先使用node_view()来运行节点,从而生成与匿名用户在浏览器中看到的完全一样的输出。这就意味着节点中任何可见的部分都将被索引。例如,假定我们有一个节点,它的ID为26。当查看URL
http://example.com/?q=node/26时,所看到的节点的各个部分也就是索引器所看到的。
如果我们有一个自定义节点类型,它包含了能够影响搜索结果的隐藏数据,那该怎么办呢?在book.module中有个不错的现成例子,我们看看它是怎么处理这一点的。我们可以把章节标题和每个子页面索引在一起,从而增加这些子页面的相关度。
/**
* Implementation of hook_nodeapi().
*/
function book_boost_nodeapi($node, $op) {
switch ($op) {
case 'update index':
// Book nodes have a parent link ID attribute.
// If it's nonzero we can have the menu system retrieve
// the parent's menu item which gives us the title.
if ($node->type == 'book' && $node->book['plid']) {
$item = menu_link_load($node->book['plid']);
return '<h2>'. $item['title'] .'</h2>';
}
}
}
注意,我们在这里把标题包装在了HTML<h2>标签中,来通知索引器为这个文本分配一个相对较高的分数。
注意 钩子nodeapi仅用于向节点添加元数据。对于那些不是节点的元素,对它们的索引,可以使用hook_update_index()。