代码之家  ›  专栏  ›  技术社区  ›  Brock Boland

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

  •  2
  • Brock Boland  · 技术社区  · 15 年前

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

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

    search phrase category:32,33
    

    我不希望在关键字文本框中显示它们,而是希望在分类法选择框中选择它们——任何用户都希望这样的表单能够以这种方式运行。我一直在寻找一个模块,将添加此功能,但没有结果。我已经试过了 hook_form_alter() #default_value 基于上一次表单提交(可在 $form_state

    有什么建议吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Brock Boland    15 年前

    创建一个模块并使用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);
            }
        }
    }
    
        2
  •  1
  •   Paul    15 年前

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