使用自定义条件搜索
Posted
技术标签:
【中文标题】使用自定义条件搜索【英文标题】:Search with custom condition 【发布时间】:2013-01-20 05:45:32 【问题描述】:如何向默认搜索模块添加条件?
我想在节点中添加一个名为“允许搜索”的复选框字段,未选中的项目不会显示在搜索结果中。
Extending Drupal 7 search 似乎是我的解决方案,但我无法使其工作; hook_search_execute()
未执行。
你能解释一下为什么会这样吗?
【问题讨论】:
您确实将 'hook_search_execute' 中的 'hook' 更改为模块的名称,不是吗? 当我提交搜索时,只有 hook_search_info() 运行,而不是 hook_search_execute()。 【参考方案1】:您需要首先在 admin/config/search/settings 中选择您的模块,并可能在“Active search modules”中取消选择 Node 模块。如果那里没有选择你的模块,你的钩子将不会被调用。
至于为什么一个钩子被调用,一个不被调用,search_get_info()(从search_menu()调用来构建搜索菜单的函数)执行的代码首先调用了hook_search_info()
的每个实现,并且然后它检查已启用搜索集成的模块。由于您的模块没有启用搜索集成,因此您的模块的hook_search_execute()
将永远不会被调用。
if (!isset($search_hooks))
foreach (module_implements('search_info') as $module)
$search_hooks[$module] = call_user_func($module . '_search_info');
// Use module name as the default value.
$search_hooks[$module] += array(
'title' => $module,
'path' => $module,
);
// Include the module name itself in the array.
$search_hooks[$module]['module'] = $module;
if ($all)
return $search_hooks;
$active = variable_get('search_active_modules', array('node', 'user'));
return array_intersect_key($search_hooks, array_flip($active));
【讨论】:
非常感谢!这就是我的解决方案!以上是关于使用自定义条件搜索的主要内容,如果未能解决你的问题,请参考以下文章