2010-10-05 8 views
1

En Drupal j'ai 3 types de contenu (A, B, C) voir link. A et C contiennent une référence de nœud à B.Drupal Views relation

Maintenant, j'ai une vue qui interroge les champs de A à partir d'un argument. Je veux montrer aussi les champs du creux C du relationschip avec B, donc:

  • A a une nodereference d'identité: 1
  • B a un ID de nœud: 1

    Je veux afficher les champs de C où nodereference de ID est également 1. Comment est-ce possible? Je ne peux pas comprendre la cartographie.

Quelqu'un peut-il m'aider s'il vous plaît?

Répondre

2

Actuellement, vous pouvez facilement passer de A à B via la référence de noeud, mais comme le lien est de C à B ne peut pas obtenir le lien vers C - c'est le problème actuel.

En résumé, vous pouvez résoudre le problème en utilisant le module Referral de nœud (voir http://drupal.org/node/431308 pour ce qu'il fait). Essentiellement, il crée un champ en lecture seule qui vous indique tous les nœuds pointant de C à B (c'est-à-dire qu'une sorte de référence de nœud inverse est créée pour chaque référence de nœud).

Disons donc que nous avons les champs de référence Node suivants

  1. Dans le type de contenu A, nous avons le champ de référence noeud appelé a_to_b_link
  2. Dans le type de contenu C nous avons le champ de référence de noeud appelé c_to_b_link
  3. dans le type de contenu B, nous avons le nœud champ Référenceur qui suit tous les liens dans le nœud de référence c_to_b_link

La création de la vue correspondante est un peu plus complexe.

  1. d'abord ajouter un filtre pour Node: Type = A
  2. Ajouter une relation a_to_b_link. Assurez-vous de cocher la case Require this relationship
  3. Ajouter une autre relation du groupe de nœuds appelée Node: Referrers. Assurez-vous également dans les paramètres de la relation que vous devez choisir le a_to_b_link dans le menu déroulant Relationship. En d'autres termes, vous faites une relation qui utilise une relation préexistante (similaire dans le concept à un pointeur sur un pointeur en C++) Assurez-vous de cocher la case Require this relationship. Cette relation par défaut est nommée Referencing Nodes par Drupal.
  4. Maintenant ajoutez tous les champs que vous voulez du type de contenu A comme vous le feriez normalement normalement dans la vue.
  5. Lorsque vous voulez ajouter des champs de type de contenu C assurez-vous que vous sélectionnez la relation Referencing Nodes
+0

@Nealv: Au lieu de Noeud Référent (que je l'ai utilisé), vous pouvez également consulter http: // drupal .org/project/reverse_node_reference (nécessite MySQL 5.1). Voir http://drupal.org/node/798786 pour les différences avec le référent de nœud. Essentiellement, le principal avantage est que vous n'avez pas besoin de créer un nouveau champ dans le type de contenu B. Vous obtiendrez simplement une référence de noeud inversé dans les relations de vues. Il pourrait être un peu plus «élégant» à cet égard. Mais les deux méthodes vont fonctionner. –