设置 Drupal 节点引用自动建议搜索两个单独的字段

Posted

技术标签:

【中文标题】设置 Drupal 节点引用自动建议搜索两个单独的字段【英文标题】:Setting up Drupal node reference autosuggest to search on two separate fields 【发布时间】:2010-08-26 15:50:54 【问题描述】:

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

一些背景

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

我尝试使用自定义视图来执行此操作,但我需要一个非常简单的标题或作者搜索,而且我们使用 AND 的时间更长了。有解决方法吗?我需要创建一个小模块来执行此操作吗?如果是这样,哪里是开始学习如何做到这一点的好地方? (我之前制作过自定义模块,但没有一个涉及与视图/cck 的接口)。我现在不确定该去哪里。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

实际上并没有一种简洁的方法来实现这一点,因为仅在标题中搜索是 Node Reference 模块(它是 CCK 的一部分)的“功能”。但是,您可以创建自定义视图来提供自动完成的结果,并使用hook_views_query_alter() 更改视图执行的查询。您创建的视图应该在字段的配置页面中选择。

下面是一个示例实现,它将查询更改为搜索节点的标题和正文。您可能需要对其进行一些自定义才能得到您想要的。

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%%')");

    


【讨论】:

是的!谢谢你。这非常有帮助。我花了很长时间才弄清楚一切,但我现在明白了。谢谢!

以上是关于设置 Drupal 节点引用自动建议搜索两个单独的字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有节点引用字段的情况下加入两个 Drupal CCK 内容类型?

在 Drupal 7 中更改数据集的搜索查询条件

当一个 CT 引用另一个 CT 时,如何消除视图中的重复 Drupal 节点?

Drupal 内容类型中节点引用的错误标签

在 Drupal 中按字段搜索自定义节点?

Drupal 的带有段落和反向引用的搜索 API