使用自定义条件搜索

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));

【讨论】:

非常感谢!这就是我的解决方案!

以上是关于使用自定义条件搜索的主要内容,如果未能解决你的问题,请参考以下文章

自定义分页与保存搜索条件

片段的条件自定义 OnBackPress

Drupal 6 中的自定义搜索表单:视图/面板还是自定义 sql?

cakePHP 从自定义数组构建一个选择框

搜索时从 Xcode 中排除文件

日志搜集分析-- 自定义elasticsearch数据查询