web-dev-qa-db-fra.com

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

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.

20
markdorison

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

BackReference (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 Drupal 7)

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

Dépendance du conten (version stable Drupal 7)

25
tim.plunkett

Module de référence d'entité fonctionne désormais avec Références d'entité correspondantes . Ceci est idéal pour tous les nœuds et entités non nœuds.

7
tmsimont

Pour Drupal 6, la meilleure option est probablement le module NodeReferrer . Pour Drupal 7, Relation correspond à la facture mais n'est pas encore prêt.

4
Pierre Buyle

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 donné). Vérifiez le correctif dans ce problème: http://drupal.org/node/104326

À 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 Entity Reference, il semble que la solution préférée consiste à utiliser Correspondant Entity References , et il y a aussi le moins largement utilisé Entity Reference Field Synchronization .]

4
geerlingguy

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 - (Entité) Module de synchronisation des champs de référence qui ajoute les fonctionnalités nécessaires pour maintenir les relations synchronisées.

La même chose peut être obtenue avec Module Références avec module cnr - cette solution fonctionne (je l'utilise sur un Drupal 7 site actuellement ), 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 sont pertinentes que pour Drupal 6 (sauf pour Relation qui a le potentiel de devenir un excellent module, mais pour le moment, il ne fait pas grand-chose et a beaucoup de problèmes).

3
Moshe Eshel

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'opération save et mettre à jour par programmation le nœud référencé.

2
enikola

Vous pouvez également essayer le module Reverse Node Reference .

1
user580

Utilisez simplement Rules et cette règle http://drupal.org/node/183624

0
giorgio79

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é.

0
drupal