Search Drupal:在高级搜索中重新选择分类术语

Search Drupal:在高级搜索中重新选择分类术语,search,drupal,drupal-6,Search,Drupal,Drupal 6,我肯定我不是第一个试图解决这个问题的人,但谷歌对我没有任何好处 如果您使用Drupal中的高级搜索来过滤分类术语,搜索表单会返回关键字文本框中的术语ID,如下所示: search phrase category:32,33 不会在“分类法选择”框中再次选择所选的值 我不希望在关键字文本框中显示它们,而是希望在分类法选择框中选择它们——任何用户都希望这样的表单能够以这种方式运行。我一直在寻找一个模块,将添加此功能,但没有结果。我已经尝试实现hook\u form\u alter,根据$form\

我肯定我不是第一个试图解决这个问题的人,但谷歌对我没有任何好处

如果您使用Drupal中的高级搜索来过滤分类术语,搜索表单会返回关键字文本框中的术语ID,如下所示:

search phrase category:32,33
不会在“分类法选择”框中再次选择所选的值

我不希望在关键字文本框中显示它们,而是希望在分类法选择框中选择它们——任何用户都希望这样的表单能够以这种方式运行。我一直在寻找一个模块,将添加此功能,但没有结果。我已经尝试实现hook\u form\u alter,根据$form\u state arg中提供的上一次表单提交,在该表单元素上设置默认值,但是a这似乎很麻烦,b似乎调用了此函数一次来验证表单,然后再次重新显示表单,提交的值在第二次需要时不可用


有什么建议吗?

这花了比应该花的时间长得多的时间,但我终于想出了办法。稍后我可能会在Drupal站点上发布一个模块,但如果其他人有同样的问题,这就是我找到的解决方案

创建一个模块并使用hook\u form\u alter修改表单。我已经有了一个用于定制高级搜索的模块,所以我把它放在那里。我不会详细介绍构建您自己的模块——您可以找到一个简单的教程,您只需要定义这一个函数

/**
 * Implementation of hook_form_alter().
 * Remove 'category:x,y,z' from the keyword textbox and select them in the taxonomy terms list
 */
function modulename_form_alter(&$form, $form_state, $form_id) {
    // Advanced node search form
    if ($form_id == 'search_form' && $form['module']['#value'] == 'node' && user_access('use advanced search')) {
        // Remove category:x,y,z from the keyword box
        $searchPhrase = $form['basic']['inline']['keys']['#default_value'];
        if(!empty($searchPhrase) && strpos($searchPhrase, 'category:') !== false) {
            $searchWords = explode(' ', $form['basic']['inline']['keys']['#default_value']);
            foreach($searchWords as $index=>$word) {
                if(strpos($word, 'category:') === 0) {
                    // Use the value to set the default on the taxonomy search
                    $word = substr($word, strlen('category:'));
                    $form['advanced']['category']['#default_value'] = explode(',', $word);
                    // Remove it from the keyword textbox
                    unset($searchWords[$index]);
                }
            }

            // Re-set the default value for the text box without the category: part
            $form['basic']['inline']['keys']['#default_value'] = implode(' ', $searchWords);
        }
    }
}

谢谢分享。在几次drupal安装之后,我现在也面临着这个问题。然而,这一次我不得不使用一些搜索扩展,如search\u config和search\u文件来满足客户端的要求。此外,我正在使用better_select,它将选择列表转换为复选框列表,以便在长列表中选择多个值。因此,复选框总是返回一些值,如果选中则返回id,如果未选中则返回0,最后返回类似搜索短语类别的值:0,0,0,0,…,0

上面的解决方案确实从关键字搜索字段中删除了类别:0,0,0,0,0,…,0字符串,并正确检查所有分类术语。对于内容类型也可以这样做,只需在整个脚本中按类型替换category:by-type:


保罗

这真的是一个错误吗?