【问题标题】:Combining multiple content types into a single search result with Drupal 6 and Views 2使用 Drupal 6 和 Views 2 将多种内容类型组合成一个搜索结果
【发布时间】:2010-04-16 03:24:13
【问题描述】:

我需要为我的 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 节点中的内容。

有什么想法...除了推出我自己的搜索功能(我目前不想做的事情)吗?

【问题讨论】:

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


    【解决方案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 解释)是确保每当引用节点的内容发生更改时,父节点都会重新索引。

    【讨论】:

    • 很遗憾,帖子内容似乎在 Google 的缓存或其他地方不可用
    【解决方案2】:

    如果您可以让您的视图达到搜索两种内容类型的程度,我认为这实际上确实成为了一个主题问题。您可以覆盖视图的各种主题模板并以特定方式组织返回的节点数组。您也可以在输出期间简单地从列表中省略内容类型 Y,并主题化内容类型 X 节点以列出 CCK 节点引用字段中的节点(这将类似于您提到的内容,但您仍将内容类型 Y 保留在视图查询并在输出期间省略它)。根据每个内容类型 X 节点的内容类型 Y 节点的数量,可能会对性能产生一些影响。

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

    【讨论】:

    • 所以基本上你的意思是,让它搜索两种内容类型并像往常一样返回结果(Y节点和X节点是单独的结果)。然后在我的主题中,处理我上面显示的合并各种结果的功能?
    • 我对“搜索:术语”过滤器并不完全熟悉,所以也许这会带来麻烦,但我的想法是让视图有两个过滤器:“搜索:术语”和“内容”类型是内容类型 X 或内容类型 Y 之一”。提交时,它将返回内容类型 x 和内容类型 y 的节点,您可以在主题/预处理端使用一些 PHP foo 来输出您需要的内容(例如,仅输出内容类型 x,然后为内容类型 x 自定义主题模板显示内容类型 y,类似于您建议的内容,或者从视图中破解节点列表并重新排列它)。
    • 嗯,我真的希望有一个更优雅的解决方案,使用视图功能来合并结果。但这似乎不会发生。我想我将不得不让它返回两种内容类型(过滤器内容类型是...之一),因为这样搜索:术语过滤器应该适用于这两种类型。在视图结果的模板中,我必须手动找到属于返回的每个 TypeX 节点的 TypeY 节点并将它们合并。这是相当hackish,但它可能会起作用。如果有人知道如何在 Views 中执行此操作...请告诉我。
    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多