在哪里实现hook_search_info& _execute以强制语言过滤器进入搜索结果?

时间:2011-12-12 20:13:03

标签: php drupal drupal-7 drupal-theming drupal-hooks

目前我正试图将“当前语言”强制转移到传递给node_search_execute的选项列表中。不幸的是,我找不到放置函数钩子的正确位置。也许我错过了一些简单的事情。

我已经了解了如何实施这两项的基本可能性。

(1)实施hook_search_infohook_search_execute

在这种情况下,我会复制node_search_execute中的代码,然后在其中添加一行,将“AND Language ='$ current_language'”添加到搜索查询中。

在我的主题文件夹中,我尝试添加函数mythemename_search_infomythemename_search_execute - 但它们不会执行。跑步时。

 function mythemename_search_info() {
    return array(
        'title' => 'Content', 
        'path' => 'node', 
        'conditions_callback' => 'mythemename_search_execute',
    );
 }

 function mythemename_search_execute($keys = NULL, $conditions = NULL){
    return array();
 }

在这个例子中 - 我只是希望得到“没有结果”所以我可以确定覆盖正在运行,然后我将实现完整的搜索功能。

(2)实施hook_search_preprocess()

我也试过mythemename_search_preprocess()

 function mythemename_search_preprocess($text) {
   // Do processing on $text
    echo $text; die();
    $text = "french";
   return $text;
 }

但同样,我没有得到预期的结果(白页上有一些文字)

所以无论我在做什么,都没有检测到这些搜索钩子。

缺少什么?他们可能必须在一个模块中吗?

2 个答案:

答案 0 :(得分:3)

是的,他们确实需要在一个模块中,大多数钩子只被称为模块而不是主题。最值得注意的例外是主题/预处理挂钩,它们都被调用。

如果您在创建自定义模块之前没有创建过一个,那么就有一个非常有用的指南here

答案 1 :(得分:1)

我在自定义模块中使用了hook_search_info()hook_search_execute()hook_search_access()。用模块名称替换“hook”。我能够使用hook_search_info()的'title'创建标签。 并在hook_search_execute中传递了结果数组。有了这个,结果开始显示在搜索页面的选项卡下。因此,创建新模块肯定会有助于获得新的搜索选项卡。