2010-04-16 35 views
1

我需要为Drupal 6网站创建一些高级的搜索功能。我有两种内容类型之间的一对多关系,需要搜索它们,尊重这种关系。将多种内容类型合并到Drupal 6和Views 2的单个搜索结果中2

为了使事情更清楚...

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

我想使用视图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节点中的内容。

任何想法...缺少滚动我自己的搜索功能(不是我想要做的事情)?

回答

1

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

我不会采取信贷的解决方案...我在一个伟大的博客文章完全回答了这个问题绊倒(即使不是在寻找了!)。这篇文章是由一个男人的名字戴维,他的我的新英雄

的文章是在这里: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解释)是确保父节点在引用的节点内容发生变化时得到重新索引。

+0

链接似乎不再工作 – 2014-03-06 15:37:02

+0

很遗憾,帖子内容似乎无法在Google的缓存或其他地方使用 – Jaibuu 2016-01-27 03:48:55

0

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

我认为不管你最终做什么这将是一个主题问题,尽管是一个复杂的问题。

+0

所以基本上你说,让它搜索这两种内容类型并返回结果,因为它通常会(Y节点和X节点是单独的结果)。然后在我的主题中,处理合并各种结果的功能,如上所示? – Chaulky 2010-04-16 18:51:30

+0

我对“搜索:条款”过滤器并不完全熟悉,所以也许会在其中引入一个扳手,但我认为该视图有两个过滤器:“搜索:术语”和“内容类型是内容类型X之一或内容类型Y“。提交时,它将返回内容类型为x和内容类型为y的节点,并且可以在主题/预处理端使用某个PHP foo输出所需内容(例如,仅输出内容类型x,然后自定义内容类型x的主题模板显示内容类型y,类似于您提出的内容,或从视图中入侵节点列表并重新排列它)。 – CalebD 2010-04-16 19:16:46

+0

那么,我真的希望有一个更优雅的解决方案,使用视图功能合并结果。但它似乎不会发生。我想我必须让它返回两种内容类型(过滤器内容类型是......之一),因为那么搜索:术语过滤器应该适用于这两种类型。在视图结果的模板中,我将不得不手动查找属于每个返回的TypeX节点的TypeY节点并合并它们。这是相当黑客,但它可能会工作。 如果有人知道如何在视图中做到这一点...请让我知道。 – Chaulky 2010-04-16 21:52:34

相关问题