我需要为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节点中的内容。
任何想法......没有推动我自己的搜索功能(不是我现在想做的事情)?
答案 0 :(得分:1)
我不会赞成这个解决方案......我偶然发现了一篇完整回答这个问题的博客文章(甚至不再看了!)。这篇文章的名字来自Davy,他是我的新英雄。
他还写了一篇后续文章,简化了这个过程! 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节点的数量,可能会有一些性能影响。
我认为无论你最终做什么,这将是一个主题问题,虽然是一个复杂的问题。