当一个 CT 引用另一个 CT 时,如何消除视图中的重复 Drupal 节点?
Posted
技术标签:
【中文标题】当一个 CT 引用另一个 CT 时,如何消除视图中的重复 Drupal 节点?【英文标题】:How can I eliminate duplicate Drupal nodes in a View when one CT references the other? 【发布时间】:2012-11-28 02:55:36 【问题描述】:带有相关模块的 Drupal 7:视图和实体参考
我有一个视图,它只显示两个不同内容类型记录的“预告片”显示类型,我们会说它们是文章和页面。
我的文章 CT 显示了一些简单的字段。
我的页面 CT 有几个字段,还有一个实体参考字段(无限条目)。实体引用字段指向其他文章节点。
然后,正如预期的那样,“我的视图”会显示每条记录的 Teaser 显示,当然,当页面记录引用另一条文章记录时,该文章的预告片会显示为页面预告片的一部分。
这很棒。问题是,我不想显示重复的文章预告片。这意味着,如果页面引用了一篇文章,我不想将相同的文章预告片显示为单独的列表。
这样想,我有这些文章:
-
第一条
第二条
第三条
我有这些页面:
-
第 4 页
第 5 页
第 6 页
第 4 页点 -> 第 1 条和第 2 条
第6页->第2条
TL;DR
现在视图会显示如下内容:
第一条 第二条 第 4 页 第一条 第二条 第 5 页 第 6 页 第二条 第三条我想要的是这个:
第 4 页 第一条 第二条 第 5 页 第 6 页 第二条 第三条编辑:这是我正在尝试做的快速图表。顺便说一下,这是对视图使用“内容”而不是“字段”,因为两个 CT 的视图中存在不相等的字段。
【问题讨论】:
您是否在输出中显示缩进来解释它,或者您是否希望输出像这样分组。我想知道原因通常视图会给出一个平面列表 @D34dman 来解释一下。这不是样式或类似问题,我已经有输出我需要的视图,只是它输出重复的解释。问题是“重复”仅作为其他节点引用的节点存在。因此,一种思考方式(尽管我认为这是不可能的)是我需要 View 来做:列出 2 种不同类型 A 和 B 的所有节点。如果节点 B 类型引用一个节点, type A,列出所有Type As时不要显示。 【参考方案1】:问题在于记录实际上从数据库的角度来看是不同的,因为有多个记录由不同的实体引用生成。
Drupal 8 的核心问题是Views relationships with multi-valued entity reference fields invalidate Distinct query option。那里应该有可用的补丁。
对于 Drupal 7,使用 Views Distinct 模块作为 it probably won't be fixed in Views。
【讨论】:
【参考方案2】:我最终通过使用对应实体引用模块 (CER) 解决了这个问题。这会创建在父 子之间同步的 2 向关系。使用它,我可以简单地从视图中过滤所有具有父级的子级。
【讨论】:
哇@Christopher Cooper,很高兴你找到了解决方案。我不知道 CER 的存在。感谢分享答案。 这是一个不必要的解决方法。我的回答不需要这样的东西。【参考方案3】:来自Advanced
部分下的查看页面。点击Other
-> Query settings: Settings
。然后勾选Distinct
复选框。
【讨论】:
遗憾的是不是 :( 问题是“子”查询是非唯一的,不是 Distinct 生效的主要查询。视图选择所有 CT #1 和 CT #2 (所有不同,没问题) - 当视图显示来自 CT #2 的实体引用指向 CT #1 记录时,问题就出现了。 @ChristopherCooper 你是对的。用实际可行的解决方案查看我的答案。以上是关于当一个 CT 引用另一个 CT 时,如何消除视图中的重复 Drupal 节点?的主要内容,如果未能解决你的问题,请参考以下文章