Comment implémenter des références de nœuds bidirectionnelles?

20

Le module de référence de nœud (un composant de CCK) fournit un excellent moyen de créer une référence d'un nœud à partir d'un autre. Quelle est la meilleure façon d'exposer une relation bidirectionnelle entre les deux? Exemple ci-dessous:

Par exemple, dans un système de suivi des tickets avec deux tickets (nœuds) A et B, vous pouvez créer une référence de nœud à partir du ticket A -> B et marquer B comme enfant. Lors de la visualisation du ticket A, il serait trivial d'afficher ces informations. Cependant, je voudrais également afficher cette relation lors de l'affichage du ticket B et afficher le ticket A comme parent.

Cette même exigence s'appliquerait également dans des situations non hiérarchiques (tickets C & D) avec une référence de C -> D, la relation devrait être exposée sur le ticket D ainsi que sur C.

markdorison
la source

Réponses:

25

Il existe de nombreux modules disponibles, votre kilométrage peut varier:

RetourRéférence (Drupal 6 uniquement)

NodeReferrer (version bêta de Drupal 7)

Relations avec les nœuds (Drupal 6 uniquement)

Références de nœuds correspondantes (version stable de Drupal 7)

Références d'entité correspondantes (version de développement Drupal 7)

Dépendance du contenu (version stable de Drupal 7)

tim.plunkett
la source
Les références de nœuds correspondantes fonctionnent parfaitement pour moi, et une fois que CER sera stable, je passerai à cela.
4

Pour Drupal 6, la meilleure option est probablement le module NodeReferrer . Pour Drupal 7, Relation fait l'affaire mais n'est pas encore prêt.

Pierre Buyle
la source
J'utilise toujours le module NodeReferrer, pour ce que ça vaut
electblake
1
Le module Relation est maintenant prêt, depuis juillet '12
ted.strauss
Oui, Relation semble être une option assez puissante. Sinon, CER est également une bonne option légère.
shivams
4

Si vous utilisez Drupal 7 / Views, vous pouvez créer une relation `` inverse '' pour obtenir une liste des nœuds qui se réfèrent à un nœud donné (ou, peut-être, des utilisateurs qui se réfèrent à un nœud donné). Découvrez le correctif dans ce problème: http://drupal.org/node/1043260

À mon avis, à moins que vous n'ayez besoin de la relation inverse explicite et prédéfinie stockée dans la base de données (cela peut parfois être utile pour des raisons de performances), l'utilisation de l'une des autres solutions est exagérée. Vous pouvez toujours rechercher une relation dans votre propre requête SQL si vous devez ...

[Modifier: depuis la rédaction de cet article, le correctif dans le problème ci-dessus a été validé dans Références pour D7, et devrait être le moyen préféré de rétro-référence (fonctionne très bien lorsque vous avez simplement besoin de listes de nœuds ou d'utilisateurs référençant un certain autre nœud ou utilisateur) .]

[Edit 2: Si vous utilisez la référence d'entité, il semble que la solution préférée consiste à utiliser les références d'entité correspondantes , et il y a aussi la synchronisation de champ de référence d'entité moins utilisée .]

geerlingguy
la source
Il semble que les références vont devenir obsolètes en faveur de référence d'entité. Je ne sais pas où cela laisse cette réponse.
Jay
1
Les références resteront en place jusqu'à ce que D7 soit une mémoire distante ... mais si vous utilisez ER, vous pouvez utiliser les références d'entité correspondantes pour faire la même chose que celle fournie par les références.
geerlingguy
3

Dans Drupal 7 (que vous avez indiqué), il semble que la solution consiste à utiliser le module de référence d'entité en combinaison avec le module de synchronisation de champ de référence (entité) qui ajoute les fonctionnalités nécessaires pour maintenir les relations synchronisées.

La même chose peut être obtenue avec le module Références avec le module cnr - cette solution fonctionne (je l'utilise actuellement sur un site Drupal 7), mais devient obsolète / obsolète au profit de la première solution que j'ai donnée.

Toutes les autres solutions mentionnées dans les réponses ci-dessus ne concernent que Drupal 6 (à l'exception de Relation qui a le potentiel de devenir un excellent module, mais pour le moment, ne fait pas vraiment grand-chose et a beaucoup de problèmes).

Moshe Eshel
la source
Voter cette réponse car elle est récente et Moshe est un membre senior de la communauté Drupal. Dans la réponse acceptée, le seul module D7 stable est CNR, et celui-ci est amorti au profit de CER (qui n'a pas encore de version stable).
aendrew
1
La relation n'a pas eu beaucoup de problèmes, même en mars. Et Moshe Eshel drupal.org/user/168876 ! = Moshe Weitzman drupal.org/user/23 (regardez cet uid ...) btw.
@chx J'ai été moi-même surpris de me voir figurer en tant que membre senior ... J'essaie d'être un meilleur contributeur mais je ne pense pas que j'atteindrai jamais le niveau de l'Original Moshe. En ce qui concerne le module Relation, je me suis basé sur les commentaires de quelqu'un qui sait (je ne nommerai pas de noms) - je n'ai pas eu l'occasion de vraiment le tester à l'époque, et je me suis appuyé sur cette opinion. Je travaille actuellement sur un projet D7 - je pense que j'en ai besoin donc je donnerai mon avis mis à jour ici quand j'aurai fini.
Moshe Eshel
2

Alternativement, si vous travaillez sur une implémentation personnalisée et que vous souhaitez une méthode de référence simple, vous pouvez vous connecter nodeapi, écouter l' saveopération et mettre à jour par programmation le nœud référencé.

enikola
la source
0

Vous pouvez utiliser le module Content Dependency .

Il vous fournit des références inversées via l'onglet et prend en charge les modules suivants: référence de nœud / référence d'entité .

drupal
la source
1
Vous ne savez pas vraiment comment cela peut être utilisé pour créer des références mutuelles?
mpdonadio