目前我正试图将“当前语言”强制转移到传递给node_search_execute的选项列表中。不幸的是,我找不到放置函数钩子的正确位置。也许我错过了一些简单的事情。
我已经了解了如何实施这两项的基本可能性。
(1)实施hook_search_info
和hook_search_execute
在这种情况下,我会复制node_search_execute
中的代码,然后在其中添加一行,将“AND Language ='$ current_language'”添加到搜索查询中。
在我的主题文件夹中,我尝试添加函数mythemename_search_info
和mythemename_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;
}
但同样,我没有得到预期的结果(白页上有一些文字)
所以无论我在做什么,都没有检测到这些搜索钩子。
缺少什么?他们可能必须在一个模块中吗?
答案 0 :(得分:3)
是的,他们确实需要在一个模块中,大多数钩子只被称为模块而不是主题。最值得注意的例外是主题/预处理挂钩,它们都被调用。
如果您在创建自定义模块之前没有创建过一个,那么就有一个非常有用的指南here。
答案 1 :(得分:1)
我在自定义模块中使用了hook_search_info()
,hook_search_execute()
和hook_search_access()
。用模块名称替换“hook”。我能够使用hook_search_info()
的'title'创建标签。
并在hook_search_execute中传递了结果数组。有了这个,结果开始显示在搜索页面的选项卡下。因此,创建新模块肯定会有助于获得新的搜索选项卡。