我的问题的简单问题:我需要一个CCK节点参考字段来搜索节点中的两个不同字段。最好的方法是什么?
一些背景
我为物理治疗计划运行日历。每个讲座都有一个阅读清单。读数是他们自己的内容类型,讲座有一个autosuggest节点参考字段,目前只搜索阅读的标题。我还需要它来搜索一个额外的cck字段,读者作者。
我试图这样做一个自定义视图,但我需要一个非常简单的标题或作者搜索,我们坚持使用AND一段时间。有解决方法吗?我是否需要创建一个小模块才能执行此操作?如果是这样,那么开始学习如何做到这一点的好地方呢? (我之前制作了自定义模块,但没有涉及与views / cck接口)。我现在不确定该怎么做。
感谢您的帮助!
答案 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%%')");
}
}