Voilà, voilà... Fin de l'aventure...

 

Fermeture de kolossaldrupal.org dans...


Bonjour tout le monde,

Drupal évolue, les versions changent et Kolossaldrupal.org était essentiellement consacré à la version 6 de Drupal.

Autant dire que les infos présentées ici commencent à dater...

Faute de temps, je ne peux plus garder le site Kolossaldrupal à jour...

Je vous aurais bien proposé de reprendre le flambeau mais... c'est tellement simple de nos jours de se faire son propre site à soi...Pourquoi s'embêter alors ? :-)

Ce site restera donc en l'état, tel qu'il était en 2011...

Ah la la ! Cela ne nous rajeunit pas !

Manuel Vila - Avril 2016

Habiller « Node reference » ou réutiliser des données complexes dans Drupal

Traduction de l'article de Ryan Price : Theming Nodereference - or - Reusing Complex Data in Drupal


C'est le moment, vous avez décidé de créer un panneau d'offres d'emploi(job board) pour votre Groupe d'Utilisateurs Drupal local. Vous y avez réfléchi, vous avez envisagé tout ce qui sera nécessaire, y compris les listings des différents emplois. Vous voulez collecter les infos de base, comme le nom du poste, sa description, le salaire, l'expérience, les tâches. Quand vient le moment de collecter les renseignements relatifs aux les entreprises, votre petit doigt vous propose de laisser un petit temps supplémentaire à la planification.

Si vous vous mettez à la place de quelqu'un qui a six ou sept offres d'emploi à publier, il devra saisir (ou du moins copier-coller) les données Contact pour chaque offre. Si chaque annonce requiert 3 ou 4 champs de plus à remplir, ce seront plus de 20 champs à renseigner par l'utilisateur. Et s'il veut modifier les données, s'il y a une coquille par exemple, il devra se coltiner chaque écran de modification six ou sept fois. Cela se chiffrera plusieurs centaines de clics et autant de saisies clavier répétitives.

tnr-1.png

Trop de clics !

Il y a mieux à faire. Une Node reference peut aider vos utilisateurs.

Lorsque ce sera fait, vous aurez deux nodes, un pour le job et un autre pour l'entreprise et vous afficherez néanmoins les données de l'entreprise dans le listing des emplois.

tnr-2.png

A la fin de ce tutoriel, vous saurez à quoi sont destinés les Node reference, comment les créer et les utiliser, et enfin, comment utiliser les fichiers de mise en page (gabarits - template files) pour styliser les affichages des références de nodes et tirer parti au mieux des relations.

Qu'est-ce qu'une Node reference ?

Node reference est livré avec le Content Construction Kit (CCK). Une référence de noeud vous permet de conserver un ensemble de données réutilisables à l'intérieur d'un node Drupal (la phrase en anglais est certainement plus concise : A nodereference lets you keep a collected set of reusable data inside a Drupal node NdT :-)), et donc « référence » ce node de différentes et intéressantes façons. Dans notre exemple, une annonce d'emploi référencera une entreprise. D'autres exemples pourraient être : des réunions qui référencent une salle de conférence, une maison qui référence un quartier, ou le profil d'un garçon qui référence sa mère (et il a une mère, on peut donc référencer sa grand-mère aussi). De nombreux modules tiers peuvent tirer parti des relations créées par un champ CCK Node reference de façon intéressante, comme vous le verrez après.

En plus de faire gagner du temps à vos utilisateurs, une Node reference vous aidera aussi à garder vos données « propres », d'un point de vue informatique. En cours d'informatique on ne cesse de vous parler de la normalisation des bases de données. En quelques mots : une même donnée ne doit pas être copiée en différents endroits de la base de données, la normalisation est une bonne chose pour les utilisateurs et pour les ordinateurs (Voir MERISE bien expliqué. NdT). Une façon d'utiliser la normalisation des bases de données dans un site Drupal est d'employer les Node reference.

Commencer par paramétrer les deux types de contenus

Pour configurer une relation Job/Entreprise, vous devez créer ces deux types de contenus dans Administrer > Gestion du contenu > Types de contenus > Ajouter en commençant par le type de contenu Entreprise.

Appelez ce nouveau type Company. Dans la zone Paramètres du formulaire de contribution, remplacez Titre par Company Name et remplacez Corps par About this Company.

tnr-2b-fr.png

Enregistrez le type de contenu puis cliquez sur Gérer les champs - qui se trouve sur la même ligne que le type de contenu Company - et ajoutez un champ de type fichier avec un élément de formulaire image pour le logo de l'entreprise.

tnr-3.png

Revenez ensuite à Administrer > Gestion du contenu > Types de contenus > Ajouter et créez le type Job Listing. Remplacez Titre par Job Title, et Corps par Job Description. Ajoutez un champ de type entier pour le Salaire et un champ Texte pour Required experience. Et maintenant, apprêtez-vous à prendre une décision :

Lorsque vous ajoutez un Référence node, vous devez choisir le widget qui sera utilisé lors de la création du node. Vous pouvez changer d'avis ensuite, mais il y a normalement un widget adapté à chaque situation :

Liste de sélection
Si le choix ne comporte pas beaucoup de nodes, la liste de sélection peut être la meilleure solution, l'utilisateur peut voir les choix possibles d'un coup et choisir le node à référencer.
Case à cocher/Boutons radio
Si vous avez besoin de référencer plusieurs nodes à la fois, les cases à cocher peuvent être utiles; et/ou si les choix possibles sont moins nombreux que ceux d'une liste de sélection (5 à 9 au maximum), les boutons radio pourraient être votre choix.
Champ texte à auto-complètement
ce widget fonctionne pratiquement comme le sélecteur de taxonomie libre ou comme le champ Écrit par en bas du formulaire de création de node; vous commencez à saisir et Drupal affiche une liste de nodes qui correspondent au texte que vous avez saisi; vous n'aurez souvent besoin de taper que quelques caractères pour trouver exactement ce que vous voulez, cela nécessite cependant que l'utilisateur ait une certaine idée de ce qu'il cherche; vous avez aussi la possibilité de ne chercher que dans les titres des nodes, ou qu'à leur début.

Dans notre exemple, l'utilisateur qui saisira un job connaîtra le nom de l'entreprise, un champ texte à auto-complètement fera donc l'affaire.

tnr-4.png

Vous aurez ensuite à indiquer les types de contenus que votre node pourra référencer. Puisque ce champ ne sert qu'à établir un lien entre une offre d'emploi et une entreprise, cochez la case Company:

tnr-5.png

Types de contenu pouvant être référencés

Désormais, lorsque votre utilisateur saisira du texte dans le champ à auto-complètement, il ne verra que les noms des entreprises correspondants à sa saisie et pas chaque node du site.

A ce stade, votre type de contenu Job Listing doit avoir les champs Salary, Experience et Company, le tout prêt à l'emploi.

tnr-6.png

Avançons un peu et ajoutons un peu de contenu aux fins de tests - soyez sûr d'avoir saisi au moins une entreprise avant d'ajouter une offre, afin d'avoir le tout pleinement opérationnel. Lorsque vous arriverez au champ à auto-complètement, vous devriez voir s'afficher un ou plusieurs choix au fur et à mesure de votre saisie.

tnr-7.png

Et voilà ! Votre panneau d'offres contient maintenant les données d'entreprise ET les données propres à chaque emploi... Oh non ! Il ne les contient pas ! Tout ce qu'il montre c'est un lien vers le node de l'entreprise. Pas glop !

tnr-8.png

Barbant

La façon la plus rapide de rémedier à cela est de se rendre dans Administrer > Gestion du contenu > Types de contenus > Job Listing > Afficher les champs. Vous verrez la liste de tous les champs ajoutés par CCK, avec des colonne Étiquettes, Résumé et Noeud complet. Ne vous préoccupez pas de la case à cocher Exclure, mais ne la cochez pas non plus, à moins que vous ne sachiez ce que vous faites.

Ici, votre but est que le logo de l'entreprise et sa description apparaissent sur la page du job. Donc, dans la colonne Noeud complet du champ Company, choisissez Résumé.

tnr-9.png

Bon, ce devrait être ok maintenant ? Rendez-vous sur votre liste d'offres... Oups ! Il y a maintenant deux chaînes Publié par et deux liens qui disent Ajouter un commentaire. C'est le moment de créer un fichier thème.

tnr-10.png

Créer un fichier gabarit pour styliser le Résumé

Avec Drupal, vous pouvez utiliser différents fichiers de mise en page pour différents cas de figure en utilisant simplement des noms de fichiers appropriés. Dans notre exemple nous voulons modifier ce qui se produit dans les nodes Company seulement lorsqu'ils sont affichés en tant que Résumés, comme lorsqu'ils sont affichés dans le panneau des offres d'emploi. Vous pouvez en faire pas mal avec Affichage des champs mais vous ne pourrez pas vous débarrasser des liens pour Company (Ajoutez un commentaires, 4 lectures) sans un minimum de code. La différence fondamentale ici c'est que vous voudrez Publié par et les liens seulement sur le node complet. Aussi, pour différencier le résumé, vous devez créer un fichier de mise en page.

Avec un navigateur de fichiers (via FTP ou sur votre disque dur local) rendez-vous dans le dossier situé dans sites/all/themes. Dans le dossier themes, vous devriez voir un fichier appelée node.tpl.php. Dupliquez ce fichier et renommez-le en node-company.tpl.php. Comment connaissons-nous le nom à donner ? Cette page sur les noms des fichiers templates vous le dira.

tnr-11.png

Si vous utilisez un thème qui a des thèmes dérivés, la démarche est presque identique. Vous n'aurez simplement besoin de copier le fichier node.tpl.php qu'à partir d'un autre dossier.

Si vous ouvrez le fichier, vous verrez une ligne de code vérifiant le résumé :

if ($page == 0):

Quant un node est affiché dans sa propre page (comme dans node/17), la valeur de $page est à 1. Lorsqu'un node est affiché en tant que Résumé, la valeur de $page est 0. Vous pouvez utiliser cette info pour modifier le comportement des résumés des nodes Company.

Trouvez la condition suivante :

if ($submitted):

Ajoutez ensuite un test pour vérifier s'il s'agit du résumé:

if ($submitted && ($page != 0)):

Dans cet exemple, vous ne voulez pas que la chaîne $submitted apparaissent à la suite des résumés.

Appliquez le même principe aux liens :

if ($links):

Ensuite ajoutez vos tests conditionnels :

if ($links && ($page != 0)):

Faites aussi une petite visite à Administrer > Gestion du contenu > Types de contenus > Company > Afficher les champs et modifiez l'étiquette de Company Logo à . Vous voudrez peut-être aussi que le logo pointe vers le node de l'entreprise, donc sous Résumé, sélectionnez Image liée au noeud.

Maintenant, regardons le résultat ! N'est-il pas brillant ? Vous avez épargné du temps et des efforts à vos utilisateurs, vous avez normalisé votre base de données, et vous n'avez cédé à aucune petite compromission.

tnr-12.png

Maintenant, allez lire l'article de Michael sur les Référence de node et Views pour faire d'autres excellentes choses.

Supprimer les données du cache

Si les modifications effectuées dans le fichier gabarit n'apparaissent pas de suite, ne vous en tenez pas pour responsable. Ce peut être le registre de thème qui en est la cause. Étant donné le système de mise en cache et de performance de Drupal 6 (pour que le site soit rapide et réactif), Drupal ne vérifie pas toujours à chaque chargement de page l'existence de nouveaux fichiers gabarits ou de nouvelles fonctions. Lorsque l'on crée un thème, cela a comme conséquence que les modifications n'apparaissent pas toujours immédiatement. Essayez l'une des méthodes suivantes avant de vous cogner la tête contre le clavier :

  1. Allez dans Administrer > Configuration du site > Performance et cliquez sur le bouton Supprimer les données du cache.
  2. Si vous avez installé le module Admin menu, sous l'icône tout à gauche du menu, cliquez sur Flush all caches > Theme registry.
  3. Avec le bloc Devel activé (livré avec le module Devel), cliquez sur le lien Empty Cache.
  4. La fonction API drupal_rebuild_theme_registry.

Ryan Price - DrupalEasy.com