当一个 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 节点?的主要内容,如果未能解决你的问题,请参考以下文章

运行多个子查询

在 React 中的组件之间共享数据

用另一个元素开始拖动

jQuery - 具有悬停效果的多个项目

CT中的术语

当名称中包含冒号时通过其属性选择元素