Le blog de Seb

[Livre] Drupal 7, concevoir et administrer vos sites web par Christophe Aubry

Voilà un moment maintenant que Christophe Aubry m'a contacté pour que je lise son livre "Drupal 7, concevoir et administrer vos sites web". Le temps que je reçoive le livre et que je le lise, les vacances sont passées par là (non pas que je me sois doré au soleil), je m'excuse de l'énorme retard auprès de Christophe blush.

Alors donc, pour commencer, ce livre s'adresse aux non initiés de Drupal, il vous guidera à travers l'installation et l'utilisation de celui-ci. Il ne vous apprendra pas à développer en tant que tel mais plutôt cliquer. C'est par là que nous avons tous débuté wink. Il est bourré de captures d'écran donc si vous vous perdez en suivant ses conseils, c'est que vous êtes loin d'être attentifs !

Le sommaire

  • Le CMS Drupal
  • L'installation de Drupal
  • L'interface d'administration
  • La configuration du site
  • La gestion des utilisateurs
  • La taxinomie
  • La structure des pages
  • Les articles et les pages
  • Créer des types de contenu
  • Gérer le contenu du site
  • La gestion des commentaires
  • Créer des affichages avec les vues
  • Ajouter des fonctions avec les modules
  • L'apparence du site avec les thèmes

L'installation

On commence bien sûr par le commencement : installer un serveur Web en local. Pour ceux qui n'y ont jamais touché, c'est très bien expliqué (tout OS confondu), pour les autres, passez à l'étape suivante. On installe ensuite la dernière version de Drupal (à l'époque de la sortie du livre c'était Drupal 7.0). Au terme de ce chapitre, il est peu probable que vous n'arriviez pas à l'écran d'accueil tant les étapes d'installation sont clairement expliquées, et puis sinon pour tout le reste il y a MasterCard Google.

Petit bémol cependant, la traduction en français est réalisée post-installation, je tiens à préciser qu'on peut installer Drupal en français directement, il vous suffit de suivre les instructions de cette page. A la sortie de Drupal 7.0, quelques chaînes n’étaient pas encore traduites et cela se voit bien sûr sur les captures d’écran du livre. On excusera l’auteur sur ce point, le retard venant de l’équipe de traduction (dont je fais partie depuis peu).

La configuration du site

Au fur et à mesure de la lecture, on voit que l'on survole les possibilités de Drupal, le but étant ici de créer un site vitrine, ou même un blog, en tout cas peu de chance de créer un site avancé : les explications sont trop détaillées, il faudrait multiplier le nombre de pages par 3 de toute façon.

Les types de contenus et la Taxinomie

"Taxinomie", la première fois que j'ai vu ce mot, j'ai cru qu'il y avait une faute : trop habitué à la version la plus proche de l'anglais (taxonomie). Passé ça, je trouve que l'avoir placé 4 chapitres avant la création de type de contenus est bien téméraire, en effet la taxonomie est maintenant un champ dans Drupal 7, cela peut donc perdre les utilisateurs d'en parler avant de l'utiliser.

Structure des pages

Ce chapitre regroupe l’utilisation des menus et des blocs, il décrit entre autres comment créer des menus, ajouter des liens à ceux-ci ainsi que les droits associés.

Les articles et les pages

On rentre ensuite dans le cœur de la gestion de contenu : les types de contenu. A commencer par les deux types qui sont déjà présents avec le profil d’installation «Standard» : Article et Page.

C’est avec ces deux types que l’on aborde la notion de champs, comment les modifier et les déplacer. On ajoute ensuite notre premier champ : signature.

Créer des types de contenu

On attaque ici la vrai notion de modularité de Drupal : les types de contenu personnalisés. L’exemple pris est la création d’un type de contenu «Destination» pour la gestion de voyages.

Je reprocherais à ce chapitre d’être assez court et de ne pas exposer le fait que cette partie de l’installation de Drupal est la base d’un site : toute la conception se fait ici. Plusieurs exemples de types de contenu réalisables aurait aidé à la compréhension des lecteurs sur l’importance de structurer ses données.

Il permet cependant d’aborder la plupart des types de champs proposés par défaut dans Drupal, l’exemple de «Destination» est très bien exploité.

La disposition du contenu (build-modes) ainsi que le module Book sont rapidement abordés à la fin du chapitre.

La gestion du contenu

Dans ce chapitre très complet, on apprendra à créer, éditer, supprimer, publier son contenu.

La gestion des commentaires

Ce chapitre porte sur la gestion des commentaires et explique également comment installer un module de CAPTCHA pour éviter le spam.

Créer des affichages avec des vues

Il est quasiment impossible de créer un site Drupal sans parler de Views, ce module est très difficile à appréhender de part sa complexité mais l’auteur reste sur des exemples de listes simples, tout en abordant les fonctionnalités les plus utiles de Views (page vide, header, footer) : cela permet de ne pas perdre le lecteur. Les affichages en mode page et bloc y sont expliqués.

Une fois ce chapitre passé, on a pu voir les possibilités du cœur de Drupal avec le profil d’installation «Standard» couplé avec quelques modules. L’auteur expose ensuite quelques modules à activer ou installer pour arriver à un vrai site de type blog : le module Contact, les flux RSS, la date de publication des contenus avec Scheduler, twitter automatiquement ses nouvelles publications avec Twitter.

 

Conclusion

En conclusion la lecture de ce livre est très utile pour les débutants pour découvrir et utiliser les modules les plus utilisés du cœur : Fields, Node, User, Taxonomy, Block, Contact, Comment, Menu... Mais cela ne s'arrête pas là, en effet bien que dans la version 7 de Drupal on puisse accomplir de plus en plus de choses rien qu'avec le cœur, l'auteur aborde également les modules les plus utilisés : Token, Pathauto, Views, Scheduler, CAPTCHA...

Je le recommande donc à ceux qui veulent s'initier à Drupal pour créer un site simple. Pour ma part, mon prochain achat sera sûrement "The definitive guide to Drupal 7", réputée comme la bible de cette version de Drupal.

 

Vous pouvez dès maintenant l'acheter sur Amazon ou sur le site des Edition ENI.

Changer le mot de passe administrateur Drupal

Lorsque vous récupérez des installations Drupal sans autres informations (nom d'utilisateur et mot de passe de l'administrateur par exemple), vous devez d'abord de réinitialiser avant de pouvoir commencer à travailler. Pour cela il suffit de le modifier en base de données.

Sous Drupal 6, c'était simple, il suffisait de récupérer le hash MD5 de votre mot de passe (en passant par exemple par un service en ligne) et ensuite de l'insérer dans votre base via phpMyAdmin par exemple via une requête SQL maison :

1
        UPDATE users SET pass = 'votre hash ici' WHERE uid = 1;

Cependant, MD5 devenant de plus en plus utilisé, des dictionnaires sont apparus en permettent parfois de retrouver un mot de passe à partir d'un hash. Quelqu'un qui aurait accès à votre base de données serait alors capable de faire tout ce qu'il veut.

Drupal 7 a mis en place une sécurité accrue grâce à un mot de passe salted (salé) : on rajoute en fait une chaîne aléatoire avant de hasher le tout avec un algorithme plus récent : SHA512. La méthode de réinitialisation devient donc un poil plus compliquée. Le moyen le plus simple est de créer un fichier .php à la racine de votre installation Drupal et d'y coller le code ci dessous. Il suffit de modifier les variables de mot de passe et d'uid à votre convenance et de visiter cette page dans votre navigateur. N'oubliez pas de supprimer le fichier après cette opération !

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$pwd = 'admin';
$uid = 1;
 
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
 
$hash = user_hash_password($pwd);
echo db_query("UPDATE users SET pass = :hash WHERE uid = :uid", array(':hash'=> $hash, ':uid'=> $uid)) ? "Mot de passe change en '$pwd'" : 'Erreur lors du changement';
?>

EDIT: Astuce encore plus rapide qui m'a été reportée par Haza` si disposez d'un accès SSH et de drush, il suffit d'exécuter la commande drush upwd (ou drush user-password) pour modifier rapidement le mot de passe de n'importe quel utilisateur.

Traduire facilement l'interface Drupal avec l10n_client

A la mise en place d'un site Drupal, suivant les modules choisis pour répondre aux besoins, on se retrouve souvent avec des modules anglais non traduits. Pour plus de lisibilité ou même par demande du client (si c'est un site réalisé pour un client), il est nécessaire de traduire les chaînes dans les pages.

Là où ça devient barbant, c'est que la méthode par défaut de Drupal pour effectuer ceci est d'aller dans Construction > Traduction > Rechercher, de rechercher la chaîne à traduire et caetera et caetera. Résultat : 20 minutes pour traduire 10 pauvres expressions pour peu qu'on se rende compte qu'on a fait des fautes.

Une autre méthode est d'installer potx ou "Translation template extractor", qui vous téléchargera en fonction du module un petit fichier PO que pourrez compléter et réimporter avec l'outil Construction > Traduction > Importer. Des logiciels comme POEdit permettent de traduire simplement et efficacement les chaînes.

Eh bien pour optimiser tout ça, je vous propose aujourd'hui le module l10n_client, qui est un module léger, sans besoin d'espace en base de données. A l'activation, vous verrez apparaître si vous êtes en user 1 ou si vous avez donné les droits nécessaires une petite barre en bas de votre navigateur :

Lorsque vous cliquez dessus le panneau s'agrandit pour laisser voir 3 zones : une pour la liste des chaînes à traduire, une pour la traduction originale, et une pour la traduction de la langue active.

La recherche est assez rapide et propose toutes les chaînes qui ont été utilisées avec la méthode t() dans l'affichage de cette page.

Erreur 500 pendant la mise à jour Drupal 7

En mettant à jour ce blog vers Drupal 7 en suivant les instructions d'UPGRADE.txt, je suis tombé sur une erreur 500 sur la page update.php?op=info.

Imaginant que c'était une erreur due au fichier .htaccess, je l'ai renommé : pas de changement. Finalement j'ai mis le nez dans le code du fichier update.php pour trouver à la ligne 340 :

1
        ini_set('display_errors', FALSE);

Ceci cache l'affichage de toutes les erreurs et génère une page d'erreur 500. Donc à moins que vous n'utilisiez les fichiers de log pour stocker les erreurs php, vous pouvez pas voir ce qui ce passe. Je ne sais pas pourquoi a choisi de faire ça (il a l'air d'agir comme Steve Jobs ces jours-ci wink ) mais ce n'est pas très pratique et cela m'a pris une heure pour débogger ceci...

Vous avez juste à commenter cette ligne ou à mettre TRUE au lieu de FALSE et voilà, vous savez exactement quel est le problème. Pour moi c'était le module token qui définissait des doublons de fonctions avec le même nom, c'est facilement désactivable par un "drush sqlc" et :

1
        UPDATE system SET status = 0 WHERE name = 'token' AND type = 'module';

C'est aussi faisable avec PhpMyAdmin.

Bonne chance pour le passage de Drupal 6 à Drupal 7 !

Migration du blog sous Drupal 7

Ça fait quelques soirées que je suis dessus maintenant, je me suis amusé à passer ce blog sous Drupal 7, et voici mes premières conclusions :

Les Moins

Beaucoup de modules ne sont pas encore disponibles

Malgré la #D7CX, beaucoup de modules ne sont pas encore portés même en release de développement. Alors vous allez me dire "Arrête de te plaindre !"... et oui, faut que j'arrête de me plaindre, car selon les anciens (oui je suis un petit jeune arrivé quand Drupal était en 6.9 smiley) c'était bien pire lors du passage de D5 à D6.
Donc on peut finalement dire que les modules les plus importants et les plus utilisés sont présents, parfois en bêta et un peu buggés mais les dev sont réactifs.

Je compte dans les absents qui m'ont étonné : 

Beaucoup d'entre eux sont encore dans le foetus git ou dans des patchs dans les issues mais ils ne devraient pas tarder.

La majeure parties des modules sont en dev

Sur les 33 modules tiers que j'ai activé, 9 sont en dev et 13 ont une release stable.

En voici la preuve :

blog@sebcorbin:~/public_html$ drush pml --status="enabled" --no-core --type="module"
Package         Nom                                                     Version        
 Administration  Administration Development tools (admin_devel)          7.x-3.0-rc1    
 Administration  Administration menu (admin_menu)                        7.x-3.0-rc1    
 Administration  Administration menu Toolbar style (admin_menu_toolbar)  7.x-3.0-rc1    
 Development     Devel (devel)                                           7.x-1.0        
 Filters         GeSHi Filter (geshifilter)                              7.x-1.x-dev    
 Mail            HTML Mail (htmlmail)                                    7.x-1.x-dev    
 Media           IMCE (imce)                                             7.x-1.2        
 Mobile          Mobile Tools (mobile_tools)                             7.x-2.x-dev    
 Multilanguage   Language icons (languageicons)                          7.x-1.0-alpha1 
 Multilanguage   Locale updater (l10n_update)                            7.x-1.0-alpha3 
 Multilingual    Internationalization (i18n)                             7.x-1.x-dev    
 Multilingual    Multilingual select (i18n_select)                       7.x-1.x-dev    
 Other           AddToAny (addtoany)                                     7.x-3.0        
 Other           Backup and Migrate (backup_migrate)                     7.x-2.1        
 Other           CSS Injector (css_injector)                             7.x-1.4        
 Other           Disqus (disqus)                                         7.x-1.1        
 Other           Global Redirect (globalredirect)                        7.x-1.3        
 Other           Inline Messages (inline_messages)                       7.x-1.0        
 Other           Mollom (mollom)                                         7.x-1.0        
 Other           Page Title (page_title)                                 7.x-2.4-beta1  
 Other           Pathauto (pathauto)                                     7.x-1.0-beta1  
 Other           Scheduler (scheduler)                                   7.x-1.x-dev    
 Other           Search 404 (search404)                                  7.x-1.0        
 Other           Token (token)                                           7.x-1.0-beta1  
 Other           Tweetbutton (tweetbutton)                               7.x-1.1        
 Other           Variable API (variable)                                 7.x-1.0-beta2  
 Statistics      Google Analytics (googleanalytics)                      7.x-1.1        
 User interface  CKEditor (ckeditor)                                     7.x-1.x-dev    
 User interface  External Links (extlink)                                7.x-1.12       
 XML sitemap     XML sitemap (xmlsitemap)                                7.x-2.0-beta2  
 XML sitemap     XML sitemap engines (xmlsitemap_engines)                7.x-2.0-beta2  
 XML sitemap     XML sitemap menu (xmlsitemap_menu)                      7.x-2.0-beta2  
 XML sitemap     XML sitemap node (xmlsitemap_node)                      7.x-2.0-beta2 

C'est un bien et un mal, avec la version de dev, on est a peu prêt sûr que les modules vont fonctionner, mais on ne peut pas suivre le processus normal de développement. En gros, on est pas notifié lors de la sortie d'une nouvelle version de dev, ou même lors d'une sortie de version stable.

Ne pas avoir peur de mettre les mains dans le camboui

Quand on recontre une erreur fatale sur une fonction qui n'existe pas, il ne faut pas hésiter à aller voir ce qui se passe directement dans le code, ce sont en général des fonctions d'API supprimées dans D7 qu'il suffit de replacer par leurs homologues et le tour est joué. Ne pas oublier d'aller voir dans les issues du modules pour voir si celle-ci n'a pas été corrigée et dans ce cas là appliquer le patch.

Les plus

Quel plaisir ce Drupal 7 sinon ! L'overlay est un délice et le design de l'administration donne envie d'y rester, j'ai cutomizé Bartik à mon goût et j'en suis content, ça donne vraiment un coup de jeune au site.
Les modules sont mieux triés dans les menus même s'il faut perdre l'habitude de ceux de Drupal 6. Des menus contextuels sont disponibles sur les blocks et les nodes. Les onglets verticaux gagnent autant de place que les fieldset collapsibles de D6 mais affichent en plus un résumé des paramètres dans ceux-ci.

J'en ai également profité pour passer mon blog sur une autre URL et j'ai aussi installé le module Disqus, un gestionnaire de commentaire complet qui prend en charge le login depuis twitter ou facebook, les tweetback, etc.. n'hésitez pas à le tester (pour ma part j'ai enlevé le système de commentaires du Core) : dites-moi ce que vous en pensez en postant un petit commentaire wink

Edito du 30 janvier

Me revoici après des mois d'absence sur ce blog !

Petite pause dans les gros projets après la sortie de Réforme (journal protestant) mis en ligne grâce à Yoran Brault et Loïc Riffault auprès desquels j'ai beaucoup appris. Le 1er DrupalCamp de Nantes s'est déroulé dans une grande émotion pour moi car j'ai pu enfin rencontrer les grands du monde de Drupal en France (j'y reviendrais dans un prochain article).

Pour faire court, toutes ces émotions et ces rencontres m'ont fait grandement plaisir et je compte bien me remettre à écrire des billets car finalement il n'y a rien de mieux qu'un blog pour poster des petites astuces que l'on trouve ou que l'on apprend par-ci par-là.

Bonne fin de week-end à tous !

Tags: 

Changement de serveur

Mon contrat concernant mon RPS arrivant à échéance, je décide de ne pas le renouveler. Trop de latence, un serveur qui rame...

Je passe donc à une dedibox v3 chez online.net !

Le quadruple de RAM pour un processeur equivalent sans stockage réseau, et 5€ de plus par mois. Voilà qui devrait me suffire wink

Modifier/Overrider facilement le CSS d'une page Drupal

Il arrive qu'on veuille modifier rapidement l'aspect d'une page sans forcément avoir le courage d'aller chercher dans le CSS du thème ou se trouve la partie à modifier, où de créer une nouvelle feuille de style pour écraser la propriété.

Pour cela, il existe CSS Injector, qui permet d'éditer les propriétés CSS dans toutes ou certaines pages.

Une fois le module installé et activé, rien de plus simple : Configuration du site > CSS injector

Ajouter une nouvelle règle

Chaque règle permet de modifier le CSS d'une ou plusieurs pages. Je vous conseille donc de créer soit des règles selon les pages où elles vont être appliquées, par exemple "Toutes les pages", "Page d'accueil", "Noeuds", etc. soit selon l'élément qu'elles vont affecter, par exemple "Suppression des puces", "Mise en forme des commentaires", etc. Ou encore les deux !

De cette manière l'administration de ces règles sera d'autant plus facile.

 

Ecraser une propriété existante

Souvenez vous que CSS Injector n'est qu'un module, il sera donc appelé avant le thème et sera écrasé par celui-ci (voir mon article sur le processus de theming Drupal), pour écraser une propriété d'un thème, il vous faudra donc user de la hiérarchie CSS :

1
2
3
body .block-locale ul li {
    list-style-type: none;
}

pour écraser :

1
2
3
.block-locale ul li {
    list-style-type: none;
}

ou encore d'utiliser le flag !important pour spécifier au navigateur que votre propriété est la plus importante.

 

Le cache

L'option Preprocess CSS (cochée par défaut) permet d'utiliser l'option preprocess de drupal_add_css pour que CSS Injector s'intègre aux CSS aggrégés et respecte le cache Drupal donc si vous ne voyez rien changer sur votre page : pensez à le vider !

 

Condition PHP

Le formulaire d'édition des règles permet d'utiliser un code PHP pour intégrer le code CSS. On peut donc aisément changer de background général selon l'heure de la journée :

Code CSS

1
2
3
body { 
    background: url('sites/all/themes/montheme/img/bg_nuit.png'); 
}

Code PHP

1
2
3
4
<?php
if((int)date('H') < 8 || (int)date('H') > 21)
    return TRUE;
?>

Attention aux erreurs PHP !

Structure du theming sous Drupal 6

Fichier attachéTaille
Icône PDF Drupal_theme_flow_6.pdf74.86 Ko

Je me suis remis depuis peu au theming sous Drupal pour un projet, et le moins que l'on puisse dire, c'est qu'on peut facilement s'y perdre sad. Entre les preprocess, template, hooks, et autres mots barbares, on ne sait plus trop qui fait quoi.

Alors bien sûr comme toujours la documentation explique très bien le processus, mais comme je n'avais pas trop le temps de relire toutes les pages concernant le theming, j'ai trouvé un PDF qui résume le tout.

Le voici en image : 

Un peu plus clair maintenant, non ? smiley

Source

Installer le book Drupal sous Coda

Si comme moi vous êtes sur Mac et vous codez sur Coda (que je recommande d'ailleurs), alors voici une petite astuce qui vous séduira. Vous l'avez peut-être remarqué, Coda intègre par défaut le book de PHP, il s'agit en fait d'un version hors ligne de la documentation. Tout ça c'est bien pratique mais pour nous, fidèles développeurs de Drupal, on aimerait avoir l'API de celui-ci sous la main...

Et bien voeu exaucé ! laugh

Comment faire ? Petit tutorial :

  • On ouvre Coda si ce n'est déjà fait > Clic sur Books dans les modes d'affichages
  • Clic sur "+" en bas à gauche
  • On remplit de cette manière 

Book title: Drupal 6 API
Book URL: http://drupalcontrib.org/
Use for Mode: PHP-HTML
Search URL: http://drupalcontrib.org/api/search/6/*

et pour l'image de couverture celle-ci est très chouette

La où ça devient intéressant, c'est que l'on a un raccourci pour tomber directement dessus : Command key icon + double clic. De même, on peut rechercher sur des sites externes qui documentent également les modules tiers, comme drupalcontrib.

L'astuce est également possible pour d'autre languages et Frameworks, comme jQuery :

URL: http://docs.jquery.com/Main_Page
Search URL: http://docs.jquery.com/Special:Search?ns0=1&search=*&go=

N'hésitez pas à rajouter les vôtres en commentaire ! 

Source

Pages

S'abonner à RSS - Le blog de Seb