You are here

介绍hook_search()

 

让我们先看一下我们将要实现的搜索钩子。hook_search()的函数签名如下所示:
 
function hook_search($op = 'search', $keys = NULL)
 
    $op参数用来描述当前正被执行的操作,它有以下可能值:
 
• name: 调用者期望接收到的一个可翻译的名字,表示这个hook_search()实现将要提供的内容类型。例如,节点模块返回了t('Content'),而用户模块返回了t('Users')。该名字用于构建搜索表单上的标签(参看图12-1)。
 
• search: 对这个类型的内容进行一次搜索。模块应该执行一次搜索并返回结果。$keys参数包含了用户在搜索表单中输入的字符串。注意,这是一个字符串,而不是一个数组。在执行了一个搜索以后,你的模块应该返回一个包含搜索结果的数组。每一个结果都应该至少包含linktitle键。可选的额外的键有type, user, date, snippet, 和extra。下面是node.module中hook_search('search')的实现的部分内容,在这里构建了结果数组(对于如何使用extra键,可参看modules/comment/comment.module中的comment_nodeapi()):
 
$extra = node_invoke_nodeapi($node, 'search result');
$results[] = array(
    'link' => url('node/'. $item->sid, array('absolute' => TRUE)),
    'type' => check_plain(node_get_types('name', $node)),
    'title' => $node->title,
    'user' => theme('username', $node),
    'date' => $node->changed,
    'node' => $node,
    'extra' => $extra,
    'score' => $item->score / $total,
    'snippet' => search_excerpt($keys, $node->body),
);
 
• reset: 搜索索引即将被重建。用于同时实现hook_update_index()的模块。如果你的模块正在追踪它的数据有多少被索引了,那么它应该将它的计数器重置为准备重新索引阶段。
 
• status: 用户想知道,这个模块提供的内容中有多少被索引了。这个操作用于同时实现了hook_update_index()的模块。它返回一个数组,其中包含remainingtotal,前者表示还有多少项等待被索引,后者表示当索引完成时被索引的项目的总数。
 
• admin:“管理➤站点配置➤搜索设置”界面即将显示。返回一个表单定义数组,里面包含了你想添加到该页面的任意元素。这个表单使用system_settings_form()方式,所以元素键名必须与用于默认值的持久化变量的名字匹配。如果你想重新回顾一下system_settings_form()是如何工作的,那么可参看第2章的“添加特定于模块的设置”一节。
 
    在我们的路径别名搜索中,只用到了namesearch操作,所以我们只需要实现这两个就可以了。
 老葛的Drupal培训班 Think in Drupal

Drupal版本: