使用Drupal 6和Views 2将多种内容类型组合到一个搜索结果中

时间:2010-04-16 03:24:14

标签: search drupal drupal-6 drupal-views cck

我需要为Drupal 6网站创建一些高级搜索功能。我在两种内容类型之间存在一对多的关系,需要搜索它们,尊重这种关系。

让事情更清楚......

我有内容类型TypeX和TypeY。 TypeY有一个节点引用CCK字段,它将它与TypeX的单个节点相关联。因此,TypeY的许多节点引用TypeX的相同节点。

我想使用Views 2为这些节点创建搜索页面。我希望每个搜索结果都是TypeX的节点,以及引用它的TypeY的所有节点。我知道我可以只对各个结果进行主题化,并使用一个视图将TypeY的节点添加到TypeX的单个节点...但是这不允许用户实际搜索TypeY ...它只会搜索TypeX而只是显示TypeY的一些节点以及它。

是否有搜索来考虑两种内容类型的节点中的内容,但是将TypeY结果合并到TypeX的“父”节点中?

在数据库术语中,似乎我需要进行连接,然后按搜索词进行过滤。但我无法弄清楚如何在Views中做到这一点。

感谢您提供任何帮助!!!

'****编辑'****

为了确保清楚,这是我正在尝试做的一个直观的例子......

_____________________________________________________________________________________
|Type X Node                           |Type Y Node                                  |
|                                      |                                             |
| Content in node of TypeX that gets   |Has a node reference that points to the node |
| searched by the view...              |of TypeX. This content gets searched too!    |
|                                      |_____________________________________________|
|                                      |Type Y Node                                  |
|                                      |                                             |
|                                      |Another TypeY node with a node reference to  |
|                                      |to the TypeX node. This gets searched too!   |
--------------------------------------------------------------------------------------

这将是搜索视图的单个结果。所有三个节点中的内容都将由视图中的“搜索:术语”过滤器考虑。因此,如果我搜索“这也被搜索了!”,我会得到上述结果。或者,如果我搜索“TypeX节点中的内容”,我会得到上面相同的搜索结果。

我知道我可以搜索TypeX并使用另一个视图加载结果显示中的TypeY节点,但它不会搜索TypeY节点中的内容。

任何想法......没有推动我自己的搜索功能(不是我现在想做的事情)?

2 个答案:

答案 0 :(得分:1)

哇,哇。我终于找到了解决这个问题的优雅方案。我简直不敢相信它是多么简单!!!

我不会赞成这个解决方案......我偶然发现了一篇完整回答这个问题的博客文章(甚至不再看了!)。这篇文章的名字来自Davy,他是我的新英雄

文章在这里:http://www.drupalcoder.com/story/667-improving-search-results-when-working-with-node-references-in-drupal

他还写了一篇后续文章,简化了这个过程! http://www.drupalcoder.com/story/696-a-better-alternative-for-improving-search-results-when-working-with-node-references-in-dru

事实证明,编写CCK的优秀人员已经考虑过索引引用节点的内容。在编辑内容类型的“显示字段”部分中,单击“搜索”选项!它允许您确定在索引父节点时索引节点的索引方式...并且您可以将其设置为完整节点。这将索引引用节点的全部内容,作为索引父节点的一部分。剩下要做的事情(Davy解释)是确保每当引用节点的内容发生变化时,父节点都会重新编制索引。

答案 1 :(得分:0)

如果您可以将视图提升到搜索两种内容类型的位置,我认为这确实会成为一个主题问题。您可以覆盖视图的各种主题模板,并以特定方式组织返回的节点数组。您还可以在输出期间简单地从列表中省略内容类型Y,并在内容类型X节点中列出来自CCK节点参考字段的节点(这与您提到的类似,但您仍然会将内容类型Y保留在视图查询并在输出期间省略它)。根据每个内容类型X节点的内容类型Y节点的数量,可能会有一些性能影响。

我认为无论你最终做什么,这将是一个主题问题,虽然是一个复杂的问题。