向节点添加元数据:nodeapi('update index')

老葛的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()。
 

Drupal版本: