设置Drupal节点引用autosuggest以在两个单独的字段上进行搜索

时间:2010-08-26 15:50:55

标签: drupal views cck

我的问题的简单问题:我需要一个CCK节点参考字段来搜索节点中的两个不同字段。最好的方法是什么?

一些背景

我为物理治疗计划运行日历。每个讲座都有一个阅读清单。读数是他们自己的内容类型,讲座有一个autosuggest节点参考字段,目前只搜索阅读的标题。我还需要它来搜索一个额外的cck字段,读者作者。

我试图这样做一个自定义视图,但我需要一个非常简单的标题或作者搜索,我们坚持使用AND一段时间。有解决方法吗?我是否需要创建一个小模块才能执行此操作?如果是这样,那么开始学习如何做到这一点的好地方呢? (我之前制作了自定义模块,但没有涉及与views / cck接口)。我现在不确定该怎么做。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

实现这一目标并不是一种简洁的方法,因为仅在标题中搜索是节点参考模块(它是CCK的一部分)的“特征”。但是,您可以创建自定义视图以提供自动完成的结果,并使用hook_views_query_alter()更改View执行的查询。应在字段的配置页面中选择您创建的视图。

下面是一个示例实现,它将查询更改为搜索节点的标题和正文。你可能需要稍微自定义它才能得到你想要的东西。

function mymodule_views_query_alter(&$view, &$query) {

    if ($view->name == 'my_custom_view' && $view->current_display == 'content_references_1') {

        // Remove the original title constraint
        unset($query->where[0]['clauses'][2]);

        // Duplicate the argument (keyword to search for), so
        // it is passed to both the title and the other field
        $query->where[0]['args'][] = $query->where[0]['args'][1];

        // Add the custom where clause
        $view->query->add_where(0, "(node.title LIKE '%%%s%%' OR node_revisions.body LIKE '%%%s%%')");

    }

}