Views, utiliser les Relations, les Arguments et les Fichiers attachés
Traduction de l'article de Michael Anello : Using Views Relationships, Arguments, and Attachments
Le module Views offre une quantité incroyable de fonctionnalités, en particulier lorsqu'il est associé à une utilisation intelligente des champs Référence de nœuds. Lorsque vous mettez les nodes de votre site en relation avec des champs Référence de nœuds, cette relation peut facilement mise à profit pour créer des views très utiles.
A titre d'exemple, je vais réaliser une vue pour un site de musique. Dans ce site, il y aura trois types de contenus liés les uns aux autres : nodes Groupes (« Black Eyed Peas », « Linkin Park », etc), nodes Album (« Back in Black », « Bat Out of Hell », etc), et Événements (concerts, télévision, passages, etc).

Ces différents types de contenus ne disposent chacun que des champs minimaux pour la démonstration des fonctionnalités de Views dont il sera question dans cet article. Par exemple, le type de contenu « Événements » ne dispose pas de champs pour les dates ou les lieux - ils pourront facilement être ajoutés par la suite.
Pour associer les trois types de contenus, les deux types de contenus « Album » et « Événement » disposent d'un champ Référence de noeud qui pointent vers le node « Groupe ». Par exemple, quand un nouveau node « Album » est créé, l'utilisateur est obligé de choisir le groupe adéquat.

Pour l'utilisation des ces types de contenus, j'ai créé plusieurs nodes de chaque type et j'ai donc quelques données pour travailler avec lors de la création de la vue :

Le but de cet article est de pouvoir créer une page qui affichera un seul node d'un groupe avec la liste de ses albums et événements. Voici un court exemple de ce que je souhaite obtenir :
[Nom du groupe]
Albums
[Album 1]
[Album 2]
[Album 3]
Événements
[Événement 1]
[Événement 2]
[Événement 3]
Il y a plusieurs façons d'obtenir cela - on pense à Panels (context) et aux blocs (visibilité) - mais je vais employer une méthode qui n'utilise que les fichiers attachés de Views. Car quelle que soit la méthode choisie, on est presque certains au final de devoir créer des views, alors pourquoi utiliser du code ou des modules supplémentaires ?
(Dans la version française de Views, Attachment a été traduit par Fichiers attachés. NdT)
Un fichier attaché Views est simplement un mode d'affichage de Views qui est rattaché à un autre affichage Views (habituellement un affichage de page ou de bloc). En simplifiant les choses, cela pourrait ressembler à ceci :

Ce schéma montre qu'un affichage de type Page ou Bloc (ainsi que d'autres types d'affichages apportés par des modules tiers) peuvent avoir n'importe quel nombre d'affichages associés. Sur une page, ces affichages associés peuvent se situer physiquement avant ou après l'affichage auquel ils sont rattachés.
Pour cet exemple, je vais créer une view qui a un affichage de type Page (appelé « Band Page ») et deux Affichages Associés - fichiers attachés - (appelés « Album Attachment » et « Events attachments »). Les deux Affichages Associés seront attachés à la fin de la page « Band » et nous aboutirons ainsi au résultat souhaité indiqué précédemment.
Comme d'habitude, vous pouvez télécharger tous les types de contenus CCK et les structures des Views à la fin de cet article.
Pour la première étape de création de la view, je suis allé sur la page admin/build/views/add et j'ai créé une view de type Node appelée « band_info » contenant les valeurs suivantes pour l'affichage par défaut :
- Paramètres de base
- Titre : Band Info
- Arguments
- Node : Nid (Action à mener si l'argument est absent : Cacher la vue / Page non trouvée (404))
- Champs
- Node : Titre
- Filtres
- Node : Publié Oui
Node : Type = Band
Ensuite j'ai crée un nouvel affichage de type Page, je l'ai nommé « Band page » et j'ai paramétré son chemin à band/%. Rappelez-vous, le % est juste un paramètre substituable pour l'argument Node : Nid paramétré pour l'affichage par défaut.
À ce stade vous pouvez enregistrer la view et la vérifier dans la Prévisualisation en direct en indiquant dans le champ Arguments l'ID de node d'un node « Band ». Cette view ne devrait afficher que le nom d'un groupe dont l'id de node est celui indiqué comme argument.
Maintenant, les choses intéressantes. Je vais créer un fichier attaché qui affiche tous les nodes « Albums » du Groupe dont l'ID de node est indiqué comme argument. Rappelez-vous, il n'y a rien de particulier en ce qui concerne les fichiers attachés (Attachments displays). Ce sont juste des views comme les autres, sauf que vous pouvez les associer à d'autres affichages. Pour créer l' « Attachment Albums », je commence par sélectionner Fichier attaché dans la liste déroulante au-dessus du bouton Nouvel affichage puis je clique sur ce bouton Nouvel Affichage.

Le paramétrage initial pour le nouvel affichage est simple :
- Paramètres de base
- Nom : Album Attachment
- Paramètres de fichiers attachés
- Position: Après
Attacher à: Band Page
Puisque nous voulons afficher une liste de nodes « Albums », je veux paramétrer Node : type sur Album. Pour cela, je dois faire attention à ne pas modifier les paramètres par défaut de toute la view, je veux juste modifier les paramètres pour cet affichage-là. Pour cela, dans le bloc Filtres, je clique sur Node : Type puis je clique sur le bouton Supplanter afin de ne modifier que l'affichage courant et non toute la view :

Une fois que ce paramètre est supplanté, je peux le modifier à « Album » sans risque de perturber les autres affichages. Il est facile de voir si un paramètre est supplanté : il n'est plus affiché en italiques dans le récapitulatif d'affichage :

On aborde à présent le point délicat : puisque notre affichage ne montrera désormais que les nodes « Albums », comment allez-vous le filtrer avec l'ID des nodes « Groupes » ? Avec une relation, bien sûr ! Souvenez-vous, les types de contenus « Groupe » et « Album » sont reliés via un champ CCK Référence de nœud. Nous pouvons utiliser cette relation pour filtrer les nodes Albums. La première étape consistera à ajouter une nouvelle relation à l'affichage Album Attachment. Dans ce cas, je vais ajouter une relation Contenu : Band. Mais avant cela, je dois m'assurer que j'ajoute cette relation uniquement à l'affichage Albums attachments et pas à la vue entière. C'est une source d'erreurs fréquente. Observez la zone Relations, vous remarquez qu'elle est en italique ? Cela veut dire que quel que soit ce que je lui ajoute, ce sera ajouté à l'affichage par défaut - et à tous les affichages qui héritent de l'affichage par défaut. Je dois d'abord cliquer sur le lien Relations puis cliquer sur le bouton Supplanter.

Une fois que c'est fait, je sais que je suis en train d'ajouter la relation au seul affichage Albums Attachments. Je vais ajouter la relation qui lie un contenu « Album » à un contenu « Groupe » - dans cet exemple, il s'agit du champ Référence de nœud Contenu : Band.

Après l'ajout de cette relation, j'ai deux paramètres à configurer. L'étiquette n'est utilisée que pour identifier la relation telle qu'elle apparaît dans cette view spécifique. Lorsqu'on ajoute plusieurs relations à une view, il est utile de leur donner des noms explicites. Heureusement, Views propose des noms par défaut pertinents, je m'en tiendrai à eux.

Dans le cas présent, le paramètre Exiger cette relation n'est pas nécessaire parce que je sais que l'argument filtrera tout sauf les contenus Albums que je veux voir.
La dernière pièce du puzzle concerne l'argument Node : Nid. Puisque l'affichage Albums Attachment hérite de l'argument de l'affichage Band Page, je dois m'assurer qu'il est utilisé correctement. Dans son état actuel, l'affichage essaiera de filtrer la liste des Albums avec l'argument Node ID fourni. Ce ne sera pas beaucoup de travail puisque l'argument fourni est le Node ID d'un Groupe. Je dois dire à la view d'utiliser cet argument pour filtrer les nodes Albums renvoyés par le Groupe - en utilisant la relation que je viens de paramétrer. Ce qui est plutôt facile à obtenir.
Tout d'abord, je dois cliquer sur l'argument Node : Nid pour le modifier, puis cliquer sur le bouton Supplanter pour que les modifications n'affectent que cet affichage. Ensuite, dans la liste déroulante Relation je dois choisir Band. Cela filtrera effectivement les nodes Albums renvoyés par le Node ID associé du Groupe.

La dernière chose que j'ai faite à Albums attachment pour le rendre un peu plus user-friendly a été de surcharger le paramètre Entête (bloc Paramètres de base, lien Entête) pour lui ajouter ceci :
Cela affichera un bel entête au-dessus des Albums. Jetons un rapide coup d'œil à la Prévisualisation en direct avec un node ID de Groupe correct comme argument, vous obtiendrez quelque chose comme ceci :

À ce stade, l'affichage Album Attachment est pratiquement terminé. Vous pouvez ajouter quelques champs supplémentaires, des tris et des options d'affichage, mais notre but est atteint.
L'affichage Events Attachment fonctionne exactement de la même façon. La différence principale est que le filtre Node: Type utilise le type de contenu Events, mais tout le reste est semblable à l'affichage Albums Attachment.
En rassemblant le tout, la view finale ressemblera à ceci :

Il n'est pas difficile d'imaginer comment vous pouvez désormais utiliser ces outils pour créer toutes sortes de views intéressantes des mêmes données. Peut-être qu'une page Album ou Événement qui affichera aussi des infos sur le node Groupe associé. Peut-être ajouter une nouveau type de contenu pour les dates d'évènements, vous pouvez alors construire une view qui affiche tous les événements par lieux de tournées avec des infos sur le Groupe pour chaque date. La méthode indiquée ici est assez souple pour vous permettre d'aller aussi loin que vous le voulez avec vos données.
Michael Anello - DrupalEasy.com
| Fichier attaché | Taille |
|---|---|
| views_relationships.zip | 4.39 Ko |
- Ajouter un commentaire
- 1484 lectures


Commentaires
les images sont absentes
reste encore une petite image
C'est réparé, merci ! (Et en
C'est réparé, merci !
(Et en plus c'était signalé en rouge dans le corps de l'article... Je n'avais pas les yeux en face des trous, assurément :-) )
Merci
Merci pour ce tuto bien complet.
Dommage que certaines traductions drupal ne soient pas plus claires (ex : Attachment a été traduit par Fichiers attaché), je ne pensais pas que cet affichage dans views permettait ca jusqu'à maintenant !
Thanks
super
Bon c'est super , je viens de faire un grand pas vers tout ce que je ne sais encore faire avec Drupal.
J'ai tout fais comme c'est marqué et ça marche et même j'ai compris le principe. Merci
Mais (oui y a toujours un mais)
je cherche à faire un menu , donc dans un bloc qui affiche
Groupe 1
---> concert 1 du groupe 1
---> concert 2 du groupe 1
Groupe 2
---> concert 1 du groupe 2
---> concert 2 du groupe 2
Peut-on utiliser la même méthode de view avec "Fichier attaché", ou bien pas du tout ?
J'ai tenté de faire idem mais en utilisant bloc à la place de page pour "Band page" mais la liste des concerts vient sous la liste des groupes.
Alors que moi j'aimerai sous chaque nom d'un groupe ses concerts.
Merci d'avance pour tout aide.
Dan