设置 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 内容类型?