Edit du 3/09/2008 : le manuel du débutant est dispo ici http://www.ineation.com/node/70
Edit : un groupe traduction et documentation a été crée. Merci d'aller sur http://wiki.ineation.com pour contribuer à cette activité et découvrir l'avancée du travail...
Vous trouverez ici ma petite contribution à la communauté Française de Drupal.
Je vais essayer de traduire régulièrement quelques uns des articles du manuel de Drupal.org.
J'ai commencé par CCK, le module phare de Drupal et par quelques pages sur les thèmes. Si je vois que cela provoque de l'intérêt je poursuivrai par la traduction de Views puis Panels.
Merci de me faire part de vos suggestions.
Mise à jour : le manuel est disponible en ligne ici http://drupalfr.org/documentation
Voila enfin la première version de notre manuel du débutant de Drupal 6 en Français
Il s'agit d'une version que je considère comme provisoire car non validée par la communauté. Je suis en effet parti de notre travail collaboratif des mois précédents que j'ai retravaillé (plus ou moins selon les chapitres) tout seul pendant mes congés.
Bref je vous laisse découvrir ce manuel. J'ai créé un pdf qui est plus facile à relire et je joins une version html qui permettra l'intégration du manuel dans un autre site.
Damien T, dis-moi comment on va pouvoir intégrer cela dans la documentation de drupalfr ?
Important ! En ce qui concerne les corrections et autres suggestions d'amélioration (il y en aura beaucoup), je vous demande d'attendre la mise en ligne sur drupalfr afin de faire vous même les corrections. J'ai en effet déjà passé beaucoup de temps sur ce manuel et je ne peux pas réaliser moi même toutes les mises à jour.
Merci à tous les contributeurs et j'espère que ce manuel servira le développement de notre communauté...
A bientôt pour de nouvelles aventures (pourquoi pas le manuel du Thèmeur ?)...
| Fichier attaché | Taille |
|---|---|
| Le manuel Drupal 6 pour les débutants | 670.53 Ko |
Vous trouverez ici un guide des modules pour Drupal.
Le premier article dresse la liste des modules indispensables pour développer des sites avec Drupal. Si vous ne savez pas par ou commencer allez voir là.
Les articles suivants mettent en avant de plus petits modules que j'ai sélectionnés parce qu'ils peuvent vous simplifier la vie ou parce qu'ils comblent une lacune de Drupal.
Bonne lecture et n'hésitez pas à me faire part de votre expérience.
Dernière mise à jour : Février 2009.
Version de Drupal : 6.X
L'un des points forts de Drupal c'est le nombre et la qualité de ses modules. Pourtant, devant la multitude des modules disponibles il est difficile de faire le bon choix. C'est pourquoi, pour vous aider dans vos premiers pas, j'ai sélectionné 38 modules indispensables et vous explique pourquoi.
Ils vont vous permettre de :
Les modules :
Admin menu est certes très simple mais c'est peut-être lui qui vous fera gagner le plus de temps. Il ajoute un menu déroulant sur le bord supérieur de votre écran afin d'accéder sans temps de chargement intermédiaire à n'importe quel écran de configuration. Adoption immédiate garantie !
Devel est destiné au développeurs et autres designers, il vous facilitera la vie lors du développement d'un nouveau site. Il peut ainsi générer des contenus factices (utilisateurs, noeuds, commentaires, catégories...), afficher les requêtes exécutées lors de l'affichage d'une page, et bien d'autres choses encore. L'extension Theme Developper est une aide précieuse pour les thémeurs car elle permet de repérer les fonctions de thèmes et les templates utilisées pour l'affichage. Très utiles pour les substitutions ("overrides").
Backup and migrate est la solution la plus efficace pour sauvegarder votre base de donnée. C'est aussi une solution que j'utilise couramment pour migrer un site du serveur de développement au serveur de production. C'est rapide et efficace.
Les modules :
CCK, Views ont montré la voie, puis Panels. Tous ces modules représentent une nouvelle génération d'outils qui accélèrent le développement de sites complexes en permettant de bâtir une bonne partie de la structure d'un site sans programmation (ou presque). Ces outils sont sans doute en grande partie responsable du succès de Drupal.
CCK va vous permettre de créer sans programmation de nouveaux types de contenu structurés (avec des champs spécifiques) adaptés à chaque problématique, de paramétrer le formulaire de saisie et de spécifier quels champs doivent apparaitre lors de l'affichage complet et du résumé. CCK dispose d'un nombre important d'extension qui augmente le type de champs rendu disponibles pour créer vos types de contenus : civilité, date, fichier, image, carte, champs calculés...
Webforms est le meilleur moyen de créer des formulaires sans écrire une ligne de code. Il y souvent une confusion entre CCK et Webform. CCK permet de créer des types de contenus, les données rentrées par l'utilisateurs seront ensuite sauvegardé dans un noeud afin d'être affichés par la suite. Les données recueillies par Webform n'ont pas vocation à créer du contenu sur le site, dans la plupart des cas, elles seront envoyés par email à l'administrateur du site. Idéal pour des formulaires de contact, d'inscription, ...
Views va vous permettre de créer des vues sur mesure pour vos listes de contenu, de les filtrer selon des conditions complexes, de trier, de spécifier quels champs afficher et comment les afficher. La puissance des extensions de views permet de réaliser toutes sorte de vues : listes, tableau, grilles, cartes google map, slideshow javascript, calendriers, etc.
Panels, lui va vous permettre, sans programmation, d'afficher et de mettre en page sur un panel des contenus, des blocs, des vues et d'autres panels dont le contenu est déterminé dynamiquement. Attention : Panels V3 (à ne pas confondre avec la V2) est sur une alpha relativement stable qui devrait passer en béta en Avril. La puissance de ce module réside dans la possibilité d'extraire des relations entre les contenus (auteur, catégorie, hiérarchie) et par exemple, de déterminer l'auteur d'un contenu pour afficher son profil à côté. Enfin il offre des possibilités de mise en page qui accélèrent grandement le développement de grilles de contenu complexes.
Ces modules sont des contributeurs important du succès de Drupal, il sont des accélérateurs de développement et permettent ainsi au développeurs de se concentrer sur les tâches à plus forte valeur ajoutée.
Le junior dans la catégorie : Context. Ce module vous permet de préciser des contextes différents en fonction des contenus affichés. Vous pouvez associer des menus et des blocks différents à chaque contexte. Ce module est ainsi une alternative plus puissante pour l'affichage de ces objets. Utilisé conjointement avec le module Spaces, c'est un moyen redoutable pour créer des éléments fonctionnels (blog, forum) réutilisable d'un site à l'autre.
L'avenir : CCK va être intégré à D7. Pour Views, il plus prudent de parier sur D8.
Les modules :
Wysiwyg API est le module à installer si vous souhaitez utiliser un éditeur WYSIWYG pour rentrer le contenu. Il s'agit d'une API qui unifie l'installation des éditeurs comme TinyMCE ou FCKeditor. C'est très flexible, vous pouvez ainsi spécifier un éditeur différent pour chaque format d'entrée.
Workflow permet de créer des processus de validation et de publication très complexes. A chaque étape du processus il est possible de lancer une action (comme l'envoi d'un email).
Les modules :
Avec l'arrivée de la version 6, Drupal à fait de grand progrès dans la gestion du multilinguisme. Autre amélioration, le module Views (voir ci dessus) qui prend maintenant en charge (en partie) la localisation. Malheureusement ce n'est pas encore parfait et le développement d'un site vraiment multilingue nécessite un travail important. Heureusement il existe un excellent module pour nous faciliter la tâche.
Internationalization (ou i18n). I18n, fait tout ce que Drupal 6 devrait faire mais ne fait pas en matière de multilinguisme. Ce module, qui est en fait un ensemble de nombreux modules, vous permet de traduire vos contenus, de traduire vos blocs, vos menus et même de définir certaines variables. Indispensable !
Language sections. Une alternative ou un complément à i18n. Il peut convenir à certains de vos projets. Il permet, par l'intermédiaire, d'un filtre de saisie (input filter) d'écrire toutes les traductions au sein d'un même article. Il suffit juste de spécifier la langue du paragraphe. A l'affichage seul les paragraphes dans la langue du visiteur sont visibles. Cela marche pour tous les champs de formulaire où les filtres sont activés, ce qui peut être très utile pour traduire la tête de page du formulaire de contact ou celui d'une vue par exemple.
Parfait ? Non pas tout à fait. Un certain nombre de choses restent difficiles à mettre en place et le paramétrage des menus et des blocs est relativement fastidieux. Enfin, si les variables permettent de traduire des éléments comme le titre du site ceci se fait de manière non intuitive pour le webmaster.
Le futur : une nouvelle avancée devrait être faite avec D7, si c'est le cas on devrait s'approcher d'une solution sans compromis.
Les modules :
Alors que la gestion des image est primordiale Drupal ne propose aucune solution native et le choix du meilleur module s'avère complexe.
Complexe, tout d'abord parce qu'il y deux concepts qui s'affrontent : soit les images sont gérés comme un champ d'un type contenu soit elles sont considérées comme un noeud à part entière.
Avec Imagefield, qui dans sa version Drupal 6 nécessite l'installation de File field vous allez gérer vos images comme un champs spécifique d'un de vos types de contenu. Il s'agit donc d'un plugin pour CCK (voir ci dessus).
Image et ses extensions vous permettent de gérer vos image comme un contenu à part entière.
Le choix entre les deux concepts va dépendre de l'utilisation que vous souhaitez faire de vos images. Si vous considérez vos images comme des objet à part entière de votre site, alors choisissez le module image. Par contre si vos images ne sont que des illustrations d'un contenu plus important alors imagefield sera plus adapté.
Simple non ? Et bien en fait pas tout à fait puisqu'il est possible de défendre l'opinion inverse ;-). Bref, pour vous faire votre opinion, testez les deux. Pour ma part je suis plus à l'aise avec Imagefield et cie que j'utilise systématiquement...
Imagecache permet de manipuler les images afin de les transformer (taille, effets spéciaux...) avant de les afficher. Ce module est extrêmement utile : ainsi, par exemple, à partir d'une seule et même image vous pouvez générer plusieurs versions de différentes tailles.
Lightbox2 est un moyen élégant d'afficher vos images en utilisant la technologie jquery. Ce module est très flexible, il peut même prendre charge les vidéos. Peut-être trop, à ce moment vous pouvez essayer une des nombreuses alternatives disponibles sur Drupal.org...
Les modules :
Embedded Media Field, est un excellent moyen pour incorporer une vidéo, une image ou un son venant d'un fournisseur extérieur dans un contenu. Il dépend du module CCK et met un nouveau type de champ à votre disposition. Ce champ est paramètrable pour accepter à peu pres n'importe quelle url ou code html venant d'un fournisseur de contenu multimédia. La liste des fournisseur de contenu est vaste : youtube, bliptv, daily motion, flickr, picasa, ode, podomatic et bien d'autres encore. Comme c'est un champ CCK, il peut ensuite être thèmé à volonté, il y a même une option pour modifier la miniature. Idéal donc pour permettre à vos utilisateur d'ajouter facilement une vidéo youtube sur leurs articles.
Asset, Media Mover et FLV Media Player ne sont pas cités car pas encore disponibles pour D6. Dommage, car utilisé conjointement il permettent d'incorporer des vidéos sur un site et de générer un code html pour vos visiteurs. De quoi créer un youtube like en fait...
[Edit Mai 2009] : finalement Média Mover et cie sont disponibles pour D6. J'intègrerai tout cela dans la prochaine mise à jour de l'article. En attendant je vous conseille la lecture de cet article pour faire du streaming vidéo avec Drupal 6 :
L'association de ces deux modules permet de réaliser de puissantes applications cartographiques.
Location intègre un formulaire d'adresse dans vos contenus (noeuds, user) et va convertir, via un web service, cette adresse en latitude et longitude.
Gmap va se charger de d'afficher sur une carte Google map l'ensemble des contenus géolocalisés. L'ensemble prend une véritable dimension lorsqu'il est associé au module View qui permet de filtrer finement les contenus qui doivent être affichés.
Tagadelic est le meilleurs moyen d'afficher un nuage de tags. En plus, il est compatible avec Views, via le module "Views Tagadelic".
Apache Solr Search Integration permet aussi la recherche par facette et vous permettra d'améliorer largement les performances de la recherche en utilisant le moteur Lucene. Parfait pour les sites "costauds". Attention la configuration du système est complexe. A noter, Acquia a annoncé qu'il lancerai un service "clé en main" pour donner facilement à votre site les fonctionnalités de Lucene.
(Nov. 2008 : XML sitemap n'est pas encore disponible pour Drupal 6).
Drupal est naturellement doué pour le référencement. Si vous activez les url descriptives, si vous les optimisez systématiquement avec Path et si vous choisissez un thème digne de ce nom vous aurez un résultat correct. Néenmoins ce n'est pas suffisant, il va vous falloir l'aide d'un certain nombre de modules supplémentaires.
Pathauto, tout d'abord, va automatiquement créer une belle url pour vos articles, url basée sur le titre des contenus. Pratique et plus productif que le module standard path car automatisé.
Métatags, autrefois nommé Nodewords, est le module indispensable pour gérer finement les mots clés et les descriptions de vos pages. Il définit tout d'abord le mots clés que l'on retrouvera dans tout le site, puis il vous permet de paramétrer différemment la page d'accueil et enfin, si vous le souhaitez vous allez pouvoir optimiser chaque page. Obligatoire si le référencement est important pour vous.
Global redirect, vous permettra d'indiquer à Google quelle url indexer. Très utile si vous avez mis en place les "nice url".
XML sitemap permet d'automatiser la création d'une sitemap et son envoi au différents moteurs de recherche.
SimpleNews est d'après moi le moyen le plus simple d'envoyer une lettre d'information à vos membre ou à vos visiteurs. Les fonctionnalités sont simples mais suffisantes pour un site dont la liste de diffusion reste modeste. Au dela, il manque tout de même une véritable application de gestion des listes ou des templates.
Si Drupal est reconnu pour sa capacité à construire des réseaux sociaux, c'est en partie grâce a ces modules. Vous allez donner le pouvoir aux membres de votre site : leur permettre de noter le contenu, de créer leurs groupes de travail ou de discussion, de choisir leurs amis, de gagner des points s'ils contribuent et d'afficher un profil détaillé.
Fivestar, associé à Voting API est la star (!) des modules de notation. Il est flexible, vous laisse le choix des logos, permet de noter selon plusieurs axes et est supporté par view. Pratique pour créer des listes "best of" triées par leur note.
Organic Group est la clé de voute du système communautaire de Drupal. Il permet aux membres de votre site de se fédérer en groupes, sorte de micro sites plus ou moins indépendants, privés ou non, à entrée libre ou sur invitation. Les membres d'un groupe peuvent alors créer les contenus autorisés par l'administrateur. OG dispose d'un nombre important de modules optionnels qui rajoutent chacun une fonctionnalité inédite. Bref, ce module est un véritable bijou.
Flag et Flagfriend permettent aux membres de votre site de se faire des amis. Ce sont des moyens simples et efficaces de gérer ces fonctionnalités. A préférer au module Buddylist qui est maintenant dépassé et à Buddylist2 qui n'est pas encore prêt. Pour ceux qui souhaitent mettre en place un système de relation entre utilisateurs plus complexe, je vous conseille d'aller voir Friendlist (en développement).
Userpointest à ma connaissance le seul système qui permet de récompenser vos meilleurs contributeurs. Ainsi pour chaque contribution, et l'on peut différentier la valeur de chaque nouveau contenu, l'auteur sera récompensé par des points. D'autres modules liés ajoutent des fonctionnalités comme l'attribution de rôle lorsque un nombre de point est atteint.
L'utilisateur est l'élément central d'une communauté. D'où la nécessité pour les membres de pouvoir détailler leur profil et leurs passions sur leur fiche. Le module standard profile est trop limité pour cela.
Content Profile, qui succède à Node Profile et à Bio et les améliore, va vous permettre de créer les profils les plus complexes. Il utilise la puissance de CCK pour créer des types de contenus spécifiques qui seront liés à un utilisateur. Comme le profil est noeud, cela permet d'utiliser tous les types de champs CCK pour le formulaire du profil : liste déroulante ou à puce, date, champs texte, photographie, carte google map, vidéo, son... Le module permet en plus de modéliser plusieurs types de profils utilisateurs et de les lier à des rôles. Bref, il n'y a pas vraiment de limite avec node profile...
Mollom est un module et un service. Pour fonctionner il faut s'inscrire sur le site de Mollom. Une fois cette étape passé et le module installé, vous bénéficierez d'une protection imparable pour tous vos formulaires (contact, commentaires, contenus...). Lorsque Mollom n'est pas sur d'avoir identifié un spam, il insert dynamiquement un captcha. L'intérêt est que ce captcha n'est pas utilisé systématiquement, le site est donc plus ergonomique. Depuis peu, on peut aussi utiliser uniquement la fonction captcha. Je l'utilise sur ce blog, depuis, je n'ai plus un seul spam qui passe le barrage. Impressionnant.
[edit] Évidemment cela laissera toujours passer les spam non automatisés utilisés par certains imbéciles (je viens d'en effacer un)... Mais bon il y en a très peu (coût du spam plus élevé).
Faut-il utiliser Drupal pour un site de e-commerce ? Ou vaut-il mieux partir sur une application spécialisée comme Magento ? La question mérite d'être posée car la réponse n'est pas évidente. En fait tout dépend des fonctionnalités dont votre site aura besoin. S'il s'agit d'un pure application de boutique en ligne alors, un outil spécialisé comme Magento, sera surement plus efficace et votre développement plus productif. Si, par contre, votre site cumule d'autres besoins, comme par exemple des fonctions communautaires avancées pour permettre aux membres de communiquer entre eux, alors Drupal va reprendre l'avantage.
Ubercart est maintenant clairement le module e-commerce star de Drupal. Il ne dispose pas encore de version définitive pour Drupal 6 mais la version RC est très stable et utilisée en production par de nombreux sites. Ubercart dispose d'une petite communauté dynamique qui vous garantie une évolution constante. Ubercart permet ainsi d'intégrer dans un site Drupal une boutique en ligne qui pourra être complétée par tous les autres modules Drupal et permet de vendre des produits tangibles ou intangibles (numériques). Un bémol, il semble que Ubercart soit un peu fâché avec les sites multilingues.
Cette catégorique regroupe les modules qui ont fait parti un moment de la liste de 38. Je les ai retirés afin de laisser la place à d'autres, "plus indispensables". Cependant ils restent intéressants, c'est pourquoi j'en garde la trace ici.
Drush est un outil de productivité qui vous permet d'installer et de mettre à jour vos modules en ne tapant qu'une ligne de commande (depuis votre shell). Cela vous évite ainsi de télécharger les archives des modules depuis drupal.org, de les décompresser sur votre serveur et de les activer via l'interface web de votre site. Bref, installez Drush en premier et vous gagnerez un temps fou par la suite...
Languages icons. C'est un tout petit module qui permet d'afficher des drapeaux pour sélectionner la langue voulue. Pas vraiment un indispensable mais bon...
Faceted Search vous permet de créer une recherche par facette. C'est un concept de recherche qui s'apparente à une simple navigation ou le visiteur va filtrer le contenu du site progressivement en sélectionnant des critères. A chaque clic,le résultat de la recherche s'affine. ainsi par exemple on pourrait imagine une recherche par facette pour les modules de ce site. L'intérêt ? La recherche ne renvoit jamais de résultats vides et l'utilisateur n'a pas à remplir de formulaires compliqués.
e-Commerce est le module le plus ancien, il dispose actuellement d'une version Béta pour Drupal 6. Très puissant et complet, il est même supporté par un livre de chez Packt qui vous permettra de monter en puissance plus rapidement.
Captcha permet d'insérer... un captcha sur vos formulaire. Un captcha est un test visuel que, normalement, seul un humain peut réussir. A n'utiliser, d'après moi, que si vous ne souhaitez pas souscrire à un service comme Mollom car, si cela est efficace, cela provoque des problèmes d'ergonomie.
Je commence cette rubrique qui consiste à mettre en avant un nouveau module chaque semaine avec un tout petit module assez peu connu.
'Me' Aliases ne fera surement jamais parti de la liste des modules "indispensables" et pourtant il pourra vous rendre de grands services.
Pour comprendre son utilité, il faut savoir comment Drupal bâtit les urls qui prennent un utilisateur en argument. Pour afficher le profil d'un utilisateur précis il faut taper l'url suivante : user/uid (user id, l'identifiant d'un utilisateur). Ainsi, par exemple, pour afficher le profil de l'utilisateur numéro 24, il faut se rendre sur la page user/24. De la même façon pour afficher la liste des contributions de ce membre, il faudra taper tracker/24.
Bon jusque là tout va bien... Où est le problème alors ? Et bien imaginez que vous souhaitiez créer un nouveau menu à destination des membres de votre site, dans ce menu vous souhaitez ajouter un lien intitulé "Modifier mon compte" et vous voulez que ce lien mène à la page du membre en question, le problème est que ce lien est dynamique, car le user id est un argument qui dépend du membre qui s'est connecté. Or la version standard de Drupal ne permet pas de gérer ce type de problématique. Vous pouvez certes utiliser un petit code php et passer $user->uid comme argument, mais c'est tout de même contraignant.
Et c'est là que 'Me' Alias intervient (roulement de tambour). Le module va vous permettre de remplacer le uid par "me". Ainsi dans le menu vous aller indiquer l'url suivante : user/me. Lorsque le membre va cliquer sur le lien, le module va prendre le relai et remplacer le 'me' par le uid du membre qui a cliqué sur le lien. De la même façon vous pouvez créer une url tracker/me pour afficher la liste des contributions du membre lconnecté.
Et voilà, grâce à 'Me' Alias vous allez pouvoir créer très facilement des menus de navigation à destination de vos membres enregistrés. C'est particulièrement utile si vous utilisez node profile pour créer des profils complexes et que vous voulez permettre à vos membres de les modifier sans passer par l'interface d'administration standard de Drupal.
L'une des spécificités de Drupal est d'avoir une interface d'administration qui utilise le même thème graphique que celui utilisé pour afficher la partie publique du site. Cette originalité, qui provoque bien des débats, peut-être désactivée par l'administrateur.
Ainsi, vous pouvez choisir un thème pour la partie publique et un thème pour l'administrateur. Dans certain cas c'est préférable, car cela vous permet d'améliorer l'ergonomie de l'interface d'administration en séparant clairement les deux zones.
En allant dans /admin/settings/admin, vous pouvez configurer Drupal 6 pour afficher les pages suivantes avec le thème d'administration :
Le problème : ce n'est pas forcément suffisant.
Par exemple, le formulaire de paramétrage d'un compte utilisateur, dont le chemin est http://monsite.fr/user/x/edit, va utiliser le thème publique. Pour certain projets cela ne sera pas pertinent et fera passer les administrateurs d'un thème à l'autre alors qu'ils sont entrain d'accomplir des taches d'administration. Pas très homogène ni très ergonomique n'est-ce pas ?
Avec le module "Administration theme" pour Drupal 6, le problème est résolu. Il vous permet très simplement de spécifier le chemin des pages qui vont utiliser le thème d'administration. Simple et efficace, vous allez enfin pouvoir utiliser un thème d'administration dans vos projets.
Pour information, si vous voulez tester un thème d'administration, allez voir Root Candy. A suivre aussi, lorsqu'il sera disponible, Drupal 6 Evolution Administration Theme.
Malheureusement on est encore loin d'obtenir une interface aussi efficace que celle de Wordpress 2.7 par exemple. Mais pour cela, il faudrait modifier plus de choses en profondeur. Par exemple, il faudrait créer des blocs et des vues spécifiques. Si le sujet vous intéresse il y avait une discussion sur le sujet ici : http://drupal.org/node/79023.
Une dizaine de modules mis à jour en moins de 2 minutes!
Qui n'a jamais pesté à l'idée de devoir installer un module ? Qui n'a jamais retardé le moment de mettre à jour un module ?
Il est vrai que Drupal, dans sa distribution de base, ne nous facilite pas la tâche. Avec la version 6 de Drupal, des progrès ont été accomplis avec l'intégration dans le coeur de "l'update status ", un module qui vous informe de l'existence d'une nouvelle version pour vos modules. Par contre, il n'est toujours pas possible de mettre à jour un module d'un simple clic dans l'interface d'administration.
En attendant ce jour, il existe une alternative à la procédure classique (je télécharge la mise à jour, j'efface les anciens fichiers, je décompresse l'archive, ...). J'ai nommé le module Drush (roulement de tambour).
Le module Drush vous permet, en une seule commande depuis votre shell, d'installer un module ou de le mettre à jour. Simple et terriblement utile. J'ai ainsi réalisé la mise à jour d'une dizaine de modules en moins de deux minutes.
Drush, accompagné de son extension "drush module manager", permet de :
Bien entendu il est fortement déconseillé de procéder à une mise à jour sans sauvegarder ses fichiers et sa base de donnée...
Pour finir Drush est disponible pour D6, "drush module manager" par contre n'a pas encore été porté et reste en version D5. Pour utiliser Drush avec D5 vous devez auparavant installer le module "update status".
Ainsi Drush fait maintenant parti, pour moi, de la liste des modules incontournables à la fois dans les phases de développement et d'administration d'un site.
Dans la série des petits modules sans prétention mais qui peuvent vous épargner de grandes peines, voilà "Protect Critical Users".
La gestion des utilisateurs par Drupal comprend une faille (d'après moi, il y débat sur le sujet). Lorsqu'un utilisateur hérite de la permission "administer users" cela lui donne le droit de gérer les utilisateurs et les membres d'un site (ca c'est normal) mais cela lui donne aussi le droit d'effacer Dieu, l'administrateur du site, celui qui a le user id n°1 (uid1).
Bref, je vous laisse imaginer la pagaille si cela arrive...
Donc, si votre site donne la possibilité à un ou des membres de gérer la liste des utilisateurs, utilisez "Protect Critical Users " afin de protéger votre administrateur...
J'ai testé Mollom, le service anti-spam, mis en place par Dries Buytaert (le créateur de Drupal) et Benjamin Schrauwen. Et bien cela marche ! Au bout de 10 heures, j'ai pu éviter de commander du viagra et faire des investissements inconsidérés...

Installation ultra simple : on active le module, on décide quels formulaires seront protégés. Dans mon cas, seuls les commentaires et le formulaire de contact sont protégés. Si vous avez un site qui permet aux utilisateurs de créer du contenu, vous pouvez aussi protéger les formulaires d'éditions.
Inscription express : sur le site de Mollom, vous indiquez l'adresse du site à protéger et choisissez votre inscription. Gratuite dans mon cas... Ce site n'ayant pas encore le succès qu'il mérite ;-) je passe largement en dessous de la barrière des 100 commentaires par jour.
Et voilà, c'est tout et cela marche... Visiblement, rien n'a changé, les formulaires ne sont pas modifiés, en fait, il vous suffit de regarder votre log pour trouver la trace des actions de Mollom. J'ai cherché pendant un bout de temps la liste des blocages à approuver. Et bien, elle n'existe pas ! Dans leur FAQ, ils expliquent que comme le système utilise des captchas pour valider ou non une menace potentielle, un véritable humain ne sera jamais bloqué. La réelle valeur ajoutée du système est que Mollom n'utilise le captcha que lorsqu'il pense avoir affaire à un spam. Cela évite à vos vrais utilisateurs de remplir systématiquement un captcha, et donc, augmente l'ergonomie de votre site.
En conclusion, pour la version gratuite, je conseille ce module et ce service à tous.
Pour les autres, cela vaut le coup de tester l'efficacité et de calculer les gains en productivité et en ergonomie.
ATTENTION : ce manuel a été écrit pour la version 5 de Drupal. Il sera néenmoins aussi utile pour les utilisateurs de D6 car la méthodologie de travail est la même.
Retrouvez aussi une formation à CCK pour Drupal 6 dans la section des vidéos.
Ce manuel est une introduction à l’utilisation du module CCK. Il s’adresse aux utilisateurs « débutant éclairés » de Drupal qui souhaitent acquérir la maitrise rapide de ce module indispensable.
Ce manuel est à la fois une documentation qui décrit les fonctionnalités du module et une formation qui, par l’intermédiaire d’une série d’exercice, vous fera créer et afficher un contenu spécifique.
Dans sa version de base, Drupal vous offre la possibilité de choisir parmis un certain nombre de contenus différents. Page, story, … chaque contenu est censé répondre à une utilisation spécifique.
Justement, très rapidement vous allez ressentir le besoin de créer des types de contenu qui ne sont pas proposé par Drupal. La version de base de Drupal permet déjà, en partant d’un contenu existant, de créer des types de contenu spécifiques. Vous pouvez ainsi partir du contenu de type story pour créer un contenu de type ‘article’ par exemple.
Mais cela est rarement suffisant, les contenus de base sont en général composés principalement d’un champ ‘Body’ qui contient l’ensemble du texte. Le contenu de ce champ n’est pas structuré, l’information qu’il contient sera donc difficile à traiter efficacement.
Pour la clarté de la démonstration prenons tout de suite un exemple. Imaginons que je souhaite créer un annuaire de chambre d’hôte. Je souhaite que les propriétaires puissent créer eux même une fiche avec la description de leur établissement sur mon annuaire. Je pourrai leur permettre de créer cette description avec un contenu de type ‘story’. Ils pourront alors y mettre toutes les informations qu’ils souhaitent… Problème : le contenu sera en vrac et je ne pourrai pas, par exemple, faire des tris en fonction du label de l’hébergement, du prix ou du nombre de chambre. Autre souci, comme le contenu est rentré par les propriétaires je ne peux pas garantir de cohérence des informations rentrées ni celle de leur affichage.
Et c’est là que CCK entre en scène. CCK va me permettre de créer dans un nouveau contenu de type hébergement tous les champs nécessaires au stockage structuré des caractéristiques de ces gîtes. Je pourrai ainsi utiliser ces valeurs pour trier, filtrer et rechercher une liste d’hébergement ou pour afficher disctinctement la liste des caractéristiques lors de l’affichage du nœud.
Il est possible de faire ce que fait CCK autrement mais savoir utiliser CCK de manière efficace permettra d’améliorer votre productivité de manière spectaculaire.
Pour aller plus loin : il y débat sur les critères de décision entre l’utilisation de CCK ou l’utilisation de Taxonomie pour gérer certains champs. Comme d’habitude il n’y a pas de réponse toute prête et tout dépend de l’utilisation qui sera faite du contenu de ce champ. Enfin vous avez toujours la possibilité de paramétrer un champs pour qu’il soit à la fois stocké en tant que CCK et en tant que taxonomie.
Le Content Construction Kit (kit de création de contenu) vous permet par l’intermédiaire d’une interface web d’ajouter des champs spécifiques à un type de contenu spécifique.
Dans Drupal 5.x vous avez la possibilité de créer autant de type de contenu que vous le souhaitez. CCK étoffe cette fonctionalité en vous permettant d’ajouter des champs spécifiques à ce contenu.
Convention d’écriture : veuillez noter que les instruction du type 'administer >> settings' ne correspondent pas à des urls mais à des étapes de navigation qui permettent d’atteindre telle ou telle page : sélectionner ‘administer’ sur le menu de navigation puis sélectionner ‘settings’.
Drupal 5.x
Voici les différentes tâches et les menus associés qui permettent de configurer ou créer un contenu CCK. Vous pouvez donc :
Installez CCK de la même manière qu’un autre module. Télécharger et décompresser l’archive depuis http://drupal.org/project/cck et ajouter le au répertoire ‘modules’ de votre site. Puis allez vers admin/build/modules pour l’activer.
CCK est en fait un groupe de plusieurs module. Le module primaire se nomme ‘Content’ et il est obligatoire de l’installer avant de pouvoir utiliser un des autre modules CCK. L’archive comprends quelques autres modules qui représente les modules de base de CCK.
Il s’agit de :
Il y a beaucoup d’autre modules disponibles. Vous pouvez les dénicher en allant vers http://drupal.org/project/Modules/category/88. Une fois que vous serez familiarisé avec CCK, vous pourrez télécharger et installer chacun de ces modules. Cependant la meilleur facon de d’apprendre CCK est de commencer avec les seuls modules de base. Il sont bien supportés par la communauté et il est plus facile de commencer avec un nombre limité de possibilité.
Travaux pratiques :
Tout au long de ce manuel nous allons créer la structure de base d’un annuaire de chambre d’hôte. Il sera composé de fiches hébergement modifiable par chaque propriétaire et d’une vue simple qui listera les hébergements en fonction de leur prix.
Si vous souhaitez avoir l’énoncé complet des travaux pratiques de découverte du module CCK, vous pouvez vous dirigez vers cette page.
Pour commencer, sur une installation « fraîche » de Drupal 5.X.
Voici l’enchaînement des tâches nécessaires à la création d’un contenu spécifique :
Ceci est une fonctionnalité de base. Nous allons créer un type de contenu qui contiendra tous les nouveaux champs spécifiques.
Allez vers Administer > Content Management > Content Types (admin/content/types). Vous y trouverez une liste de type de contenus disponibles. Il y en a déjà un certain nombre disponibles dans la distribution standard de Drupal. Vous pouvez en utilisez un ou alors ajouter un nouveau type de contenu. Pour notre exemple nous allons créer un nouveau contenu qui s’intitulera hébergement.
Travaux pratiques
Pour commencer nous allons suivre un exemple simple : la création d’un champ de type nombre qui contiendra le prix en Euros d’une nuitée dans l’hébergement.
Choisissez l’option ‘edit’ (modifier) pour le type de contenu ‘hébergement’ que nous avons crée à l’étape précédente. Une fois que vous êtes sur la page de modification, vous verrez de nouveaux onglets apparaitre : 'Manage fields', 'Display fields', et 'Add new field'. Si vous choisissez l’un des deux premiers vous ne verrez rien. Normal car vous n’avez pas encore créé de champs spécifiques. Donc, commencez par sélectionner l’onglet 'Add new field'.
Sur la page 'Add new field' on va vous demander le nom de ce champ. Vous pouvez taper ce que vous voulez ici, y compris des espaces, sachez que ce nom sera utilisé pour créer le nom du champ qui sera dans la base de donnée. Si vous tapez ‘Mon texte’, le nom du champ deviendra _mon_texte. C’est important car vous utiliserez ce nom de champ plus tard si vous voulez modifier son apparence dans votre thème. Enfin soyez conscient que le nom du champ dans la base de donnée ne pourra pas être changé ultérieurement.
Sous le nom du champ vous verrez la liste des types de variables disponibles. Ces types de variables de base sont 'Text', 'Integer', 'Decimal', 'Nodereference', et 'Userreference'. Cela caractérise les données que vous allez pouvoir créer. Le type ‘text’ permet de créer du contenu qui est stocké en tant que texte dans la base de donnée. Les types ‘Integer et ‘Décimal’ permettent de créer du contenu stocké sous la forme d’un nombre. Nodereference et Userreference stockent les identifiants d’un utilisateur ou d’un nœud, cela vous permet de créer un lien vers ce nœud ou cet utilisateur.
Sous chacun de ces types de variables se trouvent quelques options qui paramètrent la manière dont les données seront demandées (CCK appelle cela des ‘widgets’). Ces options contrôlent le type d’interface que le formulaire va utiliser pour capturer les données de l’utilisateur. Les options disponibles sont différentes pour chaque type de champ:
Cet écran ressemble au suivant:
Commencez avec quelque chose de simple : un champ Integer avec un champ de formulaire de type texte. Sélectionnez 'Integer' >> 'Text Field'.
Après, une nouvelle page s’affichera : vous pourrez ici définir plus précisément la facon dont le champ va fonctionner.
Voila à quoi l’écran ressemble.
Tout d’abord vous pouvez à nouveau définir le type de champ de formulaire. En effet cette option vous permet de changer le type de champ de formulaire une fois que le champ a été créé. Pour le moment passez cette section.
Voici quelques uns des paramètre que vous pouvez définir :
Label
Créez l’étiquette de votre champ. C’est ici que vous pouvez créer une étiquette différente du « nom machine » que vous avez choisi à l’étape 1. Cette étiquette peut contenir des éspace ou des caratères non ASCII. Il peut aussi être changé ultérieurement. Au contraire le « nom machine » ne peux pas être modifié.
Rows
C’est une option pour le champs texte seulement. Si vous choisisez un nombre supérieur à 1 vous aurez une zone de texte plus haute.
Default value
C’est une zone ou vous pouvez définir un valeur par défaut au champ. Vous pouvez la laissez vide.
Group
Si vous avez activé le module Fieldgroup, vous verrez une option pour sélectionner un group et placer votre nouveau champ à l’intérieur. Si vous n’avez pas crée de groupe auparavant cela n’aura aucun effet.
Help text
Tout ce que vous taperez dans la zone apparaitra aux utilisateur comme une description pour les aider à comprendre ce qu’il doivent taper.
Required
Si vous sélectionnez cette option pour rendre obligatoire le champs, les utilisaturs devront obligatoirement remplir le champ avant de pouvoir sauvegarder leur nouveau contenu.
Multiple values
L’option Multiple est l’une des plus puissante mais aussi l’une des moins compréhensible de CCK. Une fois sélectionnée, l’utilisateur sera capable de sélectionner ou créer plus d’une valeur. Une des utilisations courante de cette option est de créer un champ de type texte ou nombre qui utilise une liste de sélection ou des case à cocher ou les utilisateurs sont autoriser à chosir plusieurs valeurs.
Text processing
Encore une option qui ne s’applique qu’à un champ de type texte. Ici vous décidez si vous autoriser un utilisateur à sélectionner un filtre pour transformer le texte. Cette option n’est valide que si le champ crée est de type zone de texte, c-a-d si il est configuré pour avoir plus d’une ligne.
Maximum length
Sélectionner cette option pour paramétrer la taille maximum de la donnée capturée par le champs. Laissez le vierge pour permettre une taille illimitée. S’il s’agit d’un champ de type texte, ce paramètre sera utilisé pour racourcir le champ disponible à la bonne taille.
Allowed values list
Surtout utilisé dans le cas d’une liste de sélection ou des cases à cocher. Dans ce cas c’est ici que vous définirez la liste de valeur que l’utilisateur pourra choisir.
Save the field
Permet de sauvegrader l’ensemple de vos paramètre. Vous serez redirigé vers l’onglet 'Manage Fields' screen.
Travaux pratiques :
Une fois que vous avez au moins un champ de créé, cette section permet de visualiser et organiser les champs de votre formulaire d’édition. Vous verrez à la fois les champs crées avec CCK, les champs standards et les champs ajoutés par d’autres modules que CCK ne peut pas contrôler. Par example, vous verrez le contenu ‘Title’ et ‘Body’ sur cette écran.
Chaque champ à un poids qui contrôle l’ordre d’aparition dans le formulaire de création ou d’édition de contenu. Si vous avez activé les modules CCK Fieldgroup, vous pouvez organiser vos champs et les regrouper par thèmatique. Cette fonctionnalité permet d’optimiser (un peu) l’ergonomie de saisie. Si vous ne l’avez pas encore fait vous pouvez créer un groupe en allant vers 'Add new group'.
Le sélecteur de Poids permet de contrôler l’ordre d’aparition des champs. Un champs avec un poids élevé sera positionné avant un champs avec un poids inférieur. Le champs ‘Title’ à par défaut un poids de 5, comme il s’agit d’un champ non contrôler par CCK, vous ne pouvez pas le modifier. De la même manière si votre contenu utilise la taxonomie, ces champs ont un poids de -3 que vous ne pouvez pas modifier. Vous devez donc placer vos champs CCK en tenant compte de cette contrainte. Si vous avez beaucoup de champs différents cela peut devenir difficile d’obtenir un résultat acceptable (d’un point de vue ergonomique).
Travaux pratiques :
La précédente section permettait de contrôler l’apparence du formulaire de saisie de votre nouveau type de contenu. Là, cette section permet de contrôler comment les champs et leurs étiquettes apparaitront lors de la visualisation d’un noeud de ce type par vos visiteurs.
Pour chacun champ listé sur l’écran vous pouvez decider :
Travaux pratiques :
Une fois que vous avez créer le champs de votre contenu, formatté leur apparence dans le formulaire d’édition et de saisie, paramétrer leur affichage lors de la visualisation du noeud vous êtes prêt à créer de nouveaux contenus.
Allez vers 'Create content' puis choisissez le type de contenu que vous souhaitez ajouter. Vous allez alors voir apparaite votre forulaire de saisie avec tous les nouveaux champs. Testez la manière dont ce comporte chacun des champs et vérifiez que tout fonctionne comme prévu. Remplissez les champs, sauvegardez et voilà !
Travaux pratiques :
Si vous avez installé Views, CCK va automatiquement rendre disponible vos champs spécifiques dans l’interface de Views.
Une fois que vous avez compris comment Views marche, créez une nouvelle vue et vous verrez que tous vos champs spécifiques apparaissent en options à différents endroits. Vous pouvez les ajouter à la section ‘Fields’ de votre vue, en tant que filtre, en tant que varaible de tri ou comme argument. Vous serez capable de choisir les mêmes types de formatteurs que ceux que vous avez sur l’écran d’affichage des champs de CCK et vous avez une option qui permet d’afficher les valeurs multiples sur une seule ligne de résultat ou sur des lignes séparées.
Travaux pratiques :
Vous avez créé vos propres champs spéciaux pour votre type de contenu spécifique, vous avez aussi créé une vue qui tire parti de ces champs. Bravo !
Vous pouvez maintenant poursuivre votre découverte en installant de nouveaux sous-modules CCK afin d’étoffer les possibilités et créer des formulaires encore plus puissants. Enfin vous pouvez aussi apprendre comment modifier votre thème pour améliorer le rendu de l’affichage des nœuds (pas encore traduit).
Voici la liste complète des travaux pratiques.
L’objectif est de créer la structure de base d’un annuaire de chambre d’hôte. Il sera composé de fiches «hébergement» modifiables par chaque propriétaire et d’une vue simple qui listera les hébergements en fonction de leur prix.
Pour commencer, sur une installation « fraîche » de Drupal 5.X.
Préparatifs
1.Nommez votre site « Annuaire de chambre d’hôte »
2.Télécharger et installez le module
3.Activer le module primaire et les modules de bases
4.Paramètrer les permissions
A) Créer un nouveau type de contenu
5.Créer un nouveau type de contenu qui s’intitule hébergement
B) Ajouter les nouveaux champs
6.Créer un champ obligatoire pour le « prix » en euro de la chambre
7.Créer un champ optionnel qui permet de choisir le « label qualité » de la chambre (1 épi, 2 épi, 3 épis, 4 épis)
8.Créer un champ optionnel pour capturer les « services offerts » (piscine, jacusszi, tennis, déjeuner, vélos)
C) Paramètrer l’apparence du formulaire
9.Positionnez les champs « label qualité » et « prix » au dessus de body et regrouper les dans un groupe intitulé « Qualité / Prix »
10.Positionnez le champ « Services Offerts » en dernier
D) Paramètrer l’affichage des noeuds
11.Paramètrer l’affichage afin que seul le prix apparaisse dans le teaser
12.S’assurer que tous les champs apparaissent dans la vue complète
E) Créer du contenu de test
13.Créer 5 chambres d’hôtes avec un texte aléatoire
14.Tester le formulaire et le rendu de l’affichage
F) Créer les vues
15.Installer Views si nécessaire
16.Créer une vue qui n’affiche que les propriétés qui ont un label > 2 épis et qui font le tri par prix décroissants
17.Afficher la vue et savourer le résultat
Vous trouverez ici quelques pages sur le fabuleux module Panels 2.
Ces pages sont disparates et ne constituent en aucun cas un ensemble pédagogique complet. Pour le moment en tout cas...
Après avoir passé quelques heures (jours) à jouer avec Panels 2, je n'arrivais toujours pas à réaliser ce que je voulais. Je me suis donc plongé dans la documentation et dans le code afin de tenter de comprendre ce qui m'échappais jusqu'alors. La révélation m'est apparue lorsque j'ai enfin compris ce qu'était un "contexte" (context), c'est alors que j'ai franchi une étape dans la maitrise de ce superbe module.
Ce petit article est là pour vous aider à franchir ce cap plus rapidement... Il s'adresse à des utilisateurs qui maitrisent déjà les bases de Drupal mais qui débutent avec Panels.
Tout d'abord quel est le concept derrière Panels 2 ?
Panels 2 est un outil qui nous permet via une interface graphique de créer des pages (panels) constitués par l'assemblage de différents éléments de contenus extraits des objets (noeuds, utilisateurs, vues...) de votre site Drupal.
Quel est la différence avec View ?
En général on utilise Views pour afficher une liste de plusieurs contenus dans le but de permettre à l'utilisateur de trouver l'information qu'il cherche puis de la sélectionner en cliquant dessus.
En général on utilise Panels pour afficher un contenu précis dans le but de donner des informations relatives à ce contenu.
Bien entendu il existe d'autre cas d'utilisation. Enfin, il convient de préciser que l'on peut afficher une vue dans un panel alors que l'inverse est impossible.
J'appelle "objet" les divers composants d'un site Drupal : noeuds, utilisateurs, taxonomie, bloc, vues, panels... Tous ces objets sont des structures conçues pour recevoir des éléments de contenu. Chaque instance (chaque version) d'un objet contient donc une information et c'est cette information qui constitue le contexte d'un objet.
L'instance d'un noeud défini donc un contexte simple qui contient les informations de ce noeud. Un panel lui peut être constitué de plusieurs instances de plusieurs objets : son contexte est donc la somme de tous les contextes qui le compose.
Pour créer un panel, il suffit donc de lui indiquer précisémment quels sont les contextes qu'il doit charger en mémoire.
Facile non ? Mais alors, comment lui indiquer ces contextes ?
Panels met à notre disposition trois moyens complémentaires pour charger un contexte dans un panel.
On peut en utiliser un seul, ou bien deux, voir une combinaison des trois.
Examinons chacune des méthodes...
La méthode numéro 1 est la plus simple à comprendre et peut suffire dans certains cas. Il suffit, lors de la création du panel de d'indiquer au module l'instance de l'objet dont il doit récupérer le contexte.
Exemple : je souhaite avoir un panel qui contient les informations sur l'administrateur du site (nom et photo). Je vais donc paramétrer un contexte de type user avec un uid égale à 1.
C'est simple mais pas très excitant, n'est pas ? Effectivement, la puissance de Panels est dans l'utilisation des deux autres méthodes.
La fonction de l'argument est relativement facile à comprendre : l'instance de l'objet auquel se réfère l'argument correspond au contexte qui va être chargé dans le panel.
Ainsi :
Les arguments proposés par la liste déroulante sont extensible via un système de plugin intégré à Panel. Ainsi si vous ne trouvez pas l'argument qui convient à votre application, vous pouvez toujours en développer un en prenant comme exemple les arguments standards. Vous les trouverez dans le répertoire arguments du module.
Exemple : je souhaite remplacer l'affichage d'un noeud par mon panel, je vais donc choisir un argument de type noeud. Panel va récupérer le nid dans l'url pour ensuite charger le contexte correspondant. Il pourra ensuite y puiser toutes les informations dont il a besoin pour l'affichage.
Mais l'utilisation d'arguments n'est pas forcément suffisant car on ne peut pas toujours passer les arguments via l'url. Comment faire par exemple pour obliger Panels à afficher des informations sur l'auteur d'un noeud sans pour autant lui indiquer dans l'url ?
En utilisant les relations bien sur ;-)
Les relations permettent d'ajouter de nouveaux contextes à un panel en se basant sur des informations déjà chargées par un contexte existant (via les arguments ou les paramètres statiques).
Un fois encore, Panels est très flexible et les relations proposées par la liste déroulante sont extensibles via un système de plugins intégré à Panel. Ainsi si vous ne trouvez pas la relation qui convient à votre application, vous pouvez toujours en développer une en prenant comme exemple les relations standards. Vous les trouverez dans le répertoire "relationships" du module Panels.
Justement ! Dans le cadre de mon exemple, j'ai besoin d'un relation de type "user from node". A l'heure où j'écris cet article elle n'est pas disponible. Par contre on trouve un patch dans le site drupal.org qui permet d'ajouter cette relation fort utile (Merci Michelle).
Pour information voila à quoi ressemble ce fichier :
<?php
// $Id: user_from_node
/**
* @file relationships/user_from_node.inc
*
* Plugin to provide an relationship handler for user from node
*/
/**
* Plugin to provide an relationship handler for node from user
*/
function panels_user_from_node_panels_relationships() {
$args['user_from_node'] = array(
'title' => t("User from node"),
'keyword' => 'user',
'description' => t('Adds a user from node author context'),
'required context' => new panels_required_context(t('Node'), 'node'),
'context' => 'panels_user_from_node_context',
);
return $args;
}
/**
* Return a new context based on an existing context
*/
function panels_user_from_node_context($context = NULL, $conf) {
// If unset it wants a generic, unfilled context, which is just NULL
if (empty($context->data)) {
return panels_context_create_empty('user', NULL);
}
if (isset($context->data->uid)) {
// Load the user that is the author of the node
$uid = $context->data->uid;
$account = user_load(array('uid' => $uid));
// Send it to panels
return panels_context_create('user', $account);
} else {
return panels_context_create_empty('user', NULL);
}
}
?>
La partie intéressante est à la fin : le plugin récupère le uid de l'auteur du noeud, puis l'utilise comme argument pour charger l'objet user avec user_load() pour finalement le transformer en contexte avec panels_cntext_create().
Mon exemple maintenant : imaginons que je souhaite créer un panel qui remplace l'affichage standard des noeuds pour afficher le contenu du noeud à gauche et le profil de son auteur à droite. Je vais alors créer un argument de type noeud que Panels ira chercher dans l'url, puis je vais créer une relation de type "user from node". Cette relation va permettre à Panels de charger le contexte précis qui correspond aux informations qui décrivent l'auteur du noeud en question.
Voila c'est tout.
Une fois les contextes correctement paramétrés l'utilisation de Panel est (presque) un jeu d'enfant ! Il suffit d'aller dans l'onglet "content" et d'y ajouter les éléments de contenus que vous souhaitez. A condition que vous trouviez ceux que vous souhaitez et dans le cas contraire il faudra les créer mais cela est un autre sujet et une autre histoire...
Ce qu'il faut retenir :
Le paramétrage du contexte permet d'indiquer à votre panel quels sont les objets qu'il doit charger pour pouvoir afficher les informations demandées. Les instance des objets qu'il faut charger peuvent lui être indiqué par trois méthodes : statique, via argument ou par relation. Si l'on ne trouve pas les arguments ou les relations qui correspondent aux besoins de l'application, il est toujours possible de les créer soi-même via le système de plugin intégré à Panel.
Vous trouverez ici le travail en cours de traduction des premières pages du manuel des Thèmes Drupal du site drupal.org. Elles constituent un bonne introduction au sujet et vous permettront de comprendre le fonctionnement de la couche graphique de Drupal.
Pour aller plus loin il vous faudra poursuivre la lecture en Anglais.
Drupal est reconnu pour sa puissance et sa flexibilité, il est ainsi parfois difficile de comprendre comment interagissent les différents éléments qui compose l’application. Même s’il existe de nombreuses façons de réaliser un thème toutes ne sont pas forcément recommandées. Avoir connaissance des bonnes pratiques permet de minimiser les erreurs et de faciliter la maintenance. Même, si vous choisissez de ne pas respecter les règles et de mettre en œuvre votre propre méthode vous aurez de meilleurs chances de succès en en ayant connaissance.
Cela ne veut pas dire que vous devez comprendre Drupal dans les moindres détails pour être capable de créer votre propre thème. En fonctions de la complexité du résultat recherché il vous faudra plus ou moins maîtriser les spécificités du système de thème de Drupal.
Le but de ce manuel est d'introduire les notions qui vous permettront de mieux appréhender le fonctionnement de la couche graphique d’une application Drupal. Certains paragraphes nécessiteront des compétences techniques tandis que d'autres seront plus basiques. La complexité des sujets présentés dans les pages suivantes évoluera progressivement : depuis une présentation des concepts que tous les créateurs de thèmes devront maîtriser jusqu’à des sujets plus spécifiques et parfois plus techniques.
Afin de tirer parti de ce manuel vous devrez maîtriser les concepts suivants :
Une connaissance de PHP sera nécessaire pour certains chapitres mais il est possible de s’en sortir sans expertise aucune avec des thèmes purement CSS.
Selon la complexité du cahier des charges de votre thème, la création d'un thème peut être simple ou terriblement complexe. Drupal est très ouvert, il est donc nécessaire d’être prudent sur ce que vous allez tenter de réaliser. Vous devez d’abord penser au cahier des charges du site. Il est beaucoup plus facile de de réaliser un thème en ayant des objectifs très précis et spécifiques que de réaliser un thème flexible et généraliste.
Enfin si vous êtes bloqués, lisez la page de dépannage, demandez dans le forum sur les thèmes ou sur IRC @ #drupal-themes. Voyez comment utilisez l’IRC ici.
Une pratique courante dans le monde du développement web est de séparer le code et le graphisme d’un site. Il existe de nombreuses bonnes raisons pour agir de la sorte, la plus évidente étant que l’expertise nécessaire pour programmer l’application est très différente de celle nécessaire pour créer une interface belle et efficace.
En tant que créateur de Thème, vous pouvez contrôler uniquement l'affichage et la présentation. Seul le cœur de l’application et ses modules peuvent travailler avec les données d’entrée. Par exemple, un module peut mettre en place un formulaire qui aura un aspect standard et qui va traiter les données rentrées par l’utilisateur avant de les sauver dans la base de donnée. Le rôle d’un thème sera « seulement » d'intercepter l'affichage du formulaire afin de le modifier pour l’adapter à la charte graphique du site.
Ce mécanisme d’abstraction est accomplie par la fonction « theme » de Drupal. Elle dirige vers le sous-système de thème. Elle permet aux moteurs de thèmes de fournir une couche optionnelle intermédiaire pour des langages de tags comme PHPTAL ou Smarty. Elle permet aussi aux thèmes de contrôler tout le marquage de présentation. Les moteurs de thèmes sont optionnels, tout comme les langages de tags. PHPTemplate est le moteur par défaut. Comme son nom le suggère, il utilise PHP comme langage pour afficher les variables qu’il associe au marquage xHTML.
Depuis Drupal 6, les contraintes pour la réalisation d’un moteur de thème ont été considérablement réduites.
Les moteurs de thèmes peuvent modifier une sortie venant de l’application ou de l’un de ses modules tandis que les thèmes peuvent intercepter n’importe quelle sortie. Notez que le moteur PHPTemplate ne peux pas intercepter de sorties au contraire des autres moteurs. Il y a cependant un cas spécial ou les modules peuvent influencer l’affichage d’une sortie ou intercepter cette sortie mais il s’agit de cas vraiment très spécifiques et ils ne devraient pas impacter l’affichage dans la grande majorité des situations. Par exemple, le module devel le fait dans le but d'aider et assister les développeurs de thème. Plus de détails à venir dans un chapitre séparé.
Dans le cas où votre thème sera mis en forme uniquement par l’intermédiaire de feuille de style vous pouvez ignorer ce qui vient d'être dit. Mais quand le marquage à besoin d’être modifié il est alors important de savoir comment déterminer quelle est la source de la sortie afin de pouvoir la modifier.
Si vous regardez le contenu du répertoire d’un thème phptemplate vous y trouverez en général les fichiers suivants :
.info (requis)
Ce fichier est obligatoire pour que votre thème soit détecté par Drupal. Son rôle est de configurer certaines éléments de votre thème. Vous pouvez y définir :
Le nom interne du thème est aussi déduit de ce fichier. Par example, si il est nommé « drop.info », alors Drupal considèrera que le thème s’appelle « drop ».
Les version 5 et précédentes de Drupal utilisaient le nom du répertoire qui contenait les fichiers du thème pour en déduire le nom interne du thème.
Les fichier info pour les thèmes sont nouveaux dans Drupal 6. Dans la version 5, les fichiers .info était seulement utilisés pour les modules.
Fichiers de gabarits (template) (.tpl.php)
Chaque élément de contenu (nœud, block, page, etc.) est contrôlé par son propre gabarit. Ce sont ces gabarits qui vont déterminer quels champs de chaque contenu vont être affichés. Pour accomplir leur rôle, ces gabarits sont principalement constitués de textes (pour le contenu statique), de variables PHP (pour le contenu dynamique) et de balises xHTML (pour la structuration du contenu).
Il y a des situations où ils peuvent afficher d'autres type de données -xmls rss par exemple. Chaque fichier .tpl.php manipule l’affichage de données spécifiques au thème et dans certaines situation il peut manipuler plusieurs fichiers .tpl.php au travers du mécanisme de « suggestions ».
Faites attention à ne pas compliquer inutilement la logique et le contenu de ces fichier. Dans la plupart des cas, ils ne devraient contenir que des balises xHTML et des variables PHP. Vous pouvez utiliser le fichier template.php pour y intégrer le code plus complexe (voir ci-dessous).
Ces fichiers sont optionnels et s’il n’en existe aucun dans votre thème, l’affichage des contenus sera celui par défault. En effet, de nombreux gabarits standard existent dans les répertoires de l’application et de ses modules. Ce sont eux qui seront utilisé par défaut. En les copiant dans votre répertoire de thème vous vous assurez que Drupal prendra votre version en compte.
Note : Le « registre de thème » stocke les données de thème en cache Il doit être actualisé lorsque vous ajoutez ou modifiez des fichiers de gabarit ou des fonctions de thème.
Les feuilles de styles (.css)
Les feuilles de style CSS contrôlent l’apparence visuelle des contenus affichés par les gabarits. A l’image des fichiers de gabarit, elles sont optionnelles car les feuilles de styles standards de Drupal et de ses modules sont actives par défaut. Par contre chaque déclaration placée dans une feuille de style de votre thème interceptera la déclaration standard et sera donc prise en compte.
Le fichier template.php
Les fonctions spécifiques à votre thème, les fonctions de thème que vous interceptez et tout autres spécificités doivent être placés ici. Ce fichier va gérer toute la logique conditionnelle et manipuler les données de sortie. Cela n’est pas obligatoire, mais afin d’améliorer la lisibilité des fichiers .tpl.php vous pouvez inclure dans le fichier template.php des pré-processeurs qui vont générer des variables avant quelles soient inclues dans les balises des fichiers .tpl.php.
Le fichier doit commencer par une balise d’ouverture PHP « < ? php », par contre il est recommandé de ne pas inclure la balise de fermeture.
Les sous-thèmes
Pour faire court, on peut dire que les sous-thèmes se comportent comme n’importe quel autre thème. La seule différence est qu’ils héritent des ressources de leurs thèmes « parents ». Pour créer un sous-thème, il faut indiquer quel est son thème de base dans le fichier .info. Le sous-thème héritera alors de toutes les ressources du thème parent. Il peut y avoir de multiple niveau d’héritage car un sous-thème peut être le thème de base d’un autre sous-thème. En fait il n’y aucune limite matérielle à cela.
Drupal 5 et les versions précédentes, demandaient à ce que les sous-thèmes soient placés dans des sous-répertoires du thème parent. Ce n’est plus le cas avec drupal 6.
Autres
Si vous voulez baser votre travail sur un thème existant, utilisez la méthode des sous-thèmes ou faisez une copie et renommez le thème. Il fortement déconseillé de modifier directement Garland ou Minelli parce qu’ils sont utilisé pour les processus d’installation et de mise à jour.
Tous les thèmes doivent être installés dans le répertoire « sites/all/themes » afin de les séparer des fichiers standards. Lisez le chapitre sur les installation multi-site pour voir toutes les possibilités d’emplacement.
Faut-il poursuivre la traduction ? A vous de me le dire...