如何实现双向节点引用?


20

节点引用模块(CCK的一个组件)提供了一种从另一个节点创建引用的好方法。揭示两者之间的双向关系的最佳方法是什么?下面的例子:

例如,在具有两个票证(节点)A和B的票证跟踪系统中,您可以从票证A-> B创建节点引用,并将B标记为子级。查看票证A时,显示此信息很简单。但是,我也想在查看票证B并将票证A作为其父项时显示此关系。

同样的要求也适用于非分层情况(机票C和D),并带有C-> D的引用,该关系应在机票D和C上公开。

Answers:





4

如果您使用的是Drupal 7 /视图,则可以建立“反向”关系以获得引用给定节点的节点列表(或者可能是引用给定节点的用户)。查看此问题中的补丁:http : //drupal.org/node/1043260

在我看来,除非您需要存储在数据库中的明确的,预先建立的反向关系(出于性能原因,这有时可能会有所帮助),否则使用其他解决方案中的一种是过大的。如果需要,您始终可以在自己的SQL查询中查找关系。

[编辑:自从最初撰写此帖子以来,以上问题中的补丁已提交给D7参考,并且应该是反向引用的首选方式(仅在需要节点列表或用户列表引用某个其他节点或用户的情况下,效果很好) 。]

[编辑2:如果您使用的是实体引用,则似乎首选的解决方案是使用对应的实体引用,并且还有使用不那么广泛的实体引用字段同步


看起来,引用将不赞成使用,而推荐使用实体引用。不知道该答案在哪里。
杰伊

1
引用仍然会一直存在,直到D7成为遥远的内存...但是,如果您使用的是ER,则可以使用对应的实体引用来实现与引用提供的即开即用相同的功能。
geerlingguy 2014年

3

Drupal 7(您已指出)中,解决方案似乎是将实体引用模块(实体)参考字段同步模块结合使用,该模块添加了必要的功能来保持关系的同步。

使用带有cnr模块的References Module可以实现相同的效果-此解决方案有效(我目前在一个Drupal 7站点上使用它),但由于我提供的第一个解决方案而变得过时/过时。

上面答案中提到的所有其他解决方案仅与Drupal 6有关(除了Relation有潜力成为一个很好的模块,但是目前,它并没有真正做很多事情,而且有很多问题)。


投票这个答案是因为它是最近的,而Moshe是Drupal社区的资深成员。在公认的答案中,唯一稳定的D7模块是CNR,为了支持CER(目前还没有稳定的发行版),它已被贬值。
13年

1
甚至在三月份,关系还没有很多问题。还有Moshe Eshel drupal.org/user/168876!= Moshe Weitzman drupal.org/user/23(看看那个uid ...)。

@chx当我看到我成为高级会员时,我感到很惊讶……我正在努力成为一个更好的贡献者,但我认为我永远都不会升至原始Moshe的水平。关于“关系”模块,我基于有见识的人的反馈(我不会命名)-当时我没有机会进行真正的测试,并依赖该观点。我目前正在D7项目上工作-我认为我对此有需求,所以我将在完成后在此提供我的最新观点。
Moshe Eshel

2

另外,如果您正在使用自定义实现,并且希望使用直接引用的方式,则可以加入nodeapi,侦听save操作,然后以编程方式更新引用的节点。




0

您可以使用内容依赖模块。

它通过Tab提供反向引用,并支持以下模块:节点引用/实体引用


1
不太确定如何将其用于创建相互引用?
mpdonadio
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.