développement

Par Artusamak
Julien Dubois

Retour d’expérience : Drupal et les besoins métier

Il y a parfois certains projets qui vous marquent plus que d’autres et il y en a certains dont vous vous souviendrez toute votre carrière. Le sujet de ce billet fait référence à l’un de ces projets.

J’ai eut l’occasion de passer 18 mois en tant que lead développeur sur un projet métier pour un joailler de luxe. Ce projet était démesuré à bien des niveaux à commencer par son périmètre mais aussi sa taille d’équipe. Une vingtaine de personnes étaient potentiellement amenées à contribuer du code en même temps et la politique du projet était de tout passer à la loupe de la revue de code. Autant dire que ça n’a pas toujours été simple.

Source : http://www.sxc.hu/photo/1406895

Source : http://www.sxc.hu/photo/1406895

Parler plus longuement de ce projet et des leçons à en tirer pourra faire l’occasion d’un billet dédié, mon objectif ici est de partager avec vous le retour d’expérience que nous en avons extrait avec Laurent Chardin, directeur technique de Publicis Modem. Nous avons préparé une session présentée lors du Drupalcamp Paris 2013 au cours de laquelle nous avons montré un fragment des briques que nous avons conçu pour le projet.

Lorsque l’on est expert Drupal, travailler sur de grands projets est l’occasion de chercher à résoudre des problématiques à la mode Drupal à savoir en construisant de nouvelles briques extensibles et réutilisables. Ce projet démarré entre autre par Damien Tournoud a donné vie aux modules Entity Reference, Views Megarow, Entity Override, Migrate remote et à bien d’autres idées qui ont fait leur bout de chemin telle que les form modes qui ont été intégrés au cœur de Drupal 8 grâce à Andrei Amateescu (*dev content*).

Nous avons donc tenté de vous présenter en 45 minutes quelques uns des modules que nous avons développé et avons listé des conseils que nous vous recommandons de mettre en œuvre lorsque vous construisez un backoffice pour vos clients. Le front est toujours très important mais il ne faut pas négliger vos utilisateurs de backoffice, ils passent parfois (souvent) plus de temps à utiliser l’application que les utilisateurs finaux alors ne les délaissez pas ! Vous avez beaucoup d’outils à disposition pour cela aussi avec Drupal core (et notamment ses types d’entités) mais aussi via l’univers de la contrib : vous pouvez créer des vues, calculer des données, créer des groupes d’actions pré-déterminées, etc dans le but de faire gagner du temps à vos utilisateurs. Si en plus de cela vous invitez ces utilisateurs lors de démonstrations régulières (comme Scrum le propose, cf ma présentation de Scrum) vous pourrez intégrer leur avis et les aider à adopter votre travail encore plus vite.

N’hésitez pas à réagir à cette présentation au travers des commentaires, je me ferai un plaisir de vous répondre.

LIBEREZ DRUPAL ! Exploitez les concepts Drupal et magnifiez votre backend !

Par Artusamak
Julien Dubois

Scrum et Drupal, ça vous dit ?

Certains d’entre vous le savent peut être mais j’ai croisé la route de l’agilité il y a quelques années et continue de m’y intéresser en multipliant les lectures et en mettant en application cette philosophie.

Après avoir pris un peu de recul et multiplié les expériences avec l’agilité et Scrum en particulier j’ai décidé de soumettre une présentation au titre aguicheur (« Agilité : En quoi SCRUM et Drupal sont faits pour s’entendre ») au Drupalcamp Paris afin de présenter l’agilité (et Scrum en particulier) à mes homologues Drupaliens.
Le but de la session était plutôt de présenter Scrum que de parler de Drupal mais j’ai quand même pris le temps de montrer en quoi Drupal s’intégrait particulièrement bien avec Scrum.

Curieux d’en savoir plus ? Voici la vidéo de la présentation et les slides qui vont avec. N’hésitez pas à laisser un commentaire si vous avez aimé, détesté ou si vous pensez que des modifications mériteraient d’être apportées à la présentation.

L’ensemble des présentations ont été filmées ou enregistrée, je vous invite à consulter le super programme pour retrouver le détail des présentations.

J’en profite également pour dire un grand bravo à l’équipe d’organisation qui a beaucoup bossé pour faire de cette conférence un bel événement, avec un bravo particulier à Anne-sophie Picot (asplamagnifique) ainsi que mon cher et tendre quasi homonyme Julien Dubreuil (Julien_D).

En quoi Scrum et Drupal sont faits pour s’entendre (vidéo)

En quoi Scrum et Drupal sont faits pour s’entendre (slides) – Drupalcamp Paris 2013

Sos à l'aide je ne parviens à acceder aux modules

Bonjour à tous,
depuis plus d'un mois je ne parviens plus à acceder au module drupal voila le message que je reçois chaque fois: Sorry, adersse ip de ma machine has been greylisted by http:BL.
You may try whitelisting on http://drupal.org/httpbl/whitelist.
Je suis à votre écoute car j'ai déjà tout essayé en vain.
Merci d'avance

Gestion d'offre d'emplois par ou commencer ?

Bonjour à tous !

Je suis actuellement en stage.
Mon projet est de créer un site sous drupal commons (fait) et d'y développer une application pour gérer des offres d'emplois. Le problème c'est que je ne connais pas du tout Drupal Commons, et que je ne sais pas par ou commencer. Si quelqu'un aurait une piste, je suis preneur !

Par juliendubreuil
julien dubreuil
Drupal since 2009

Drupal, Afficher les erreurs PHP.

Ce billet aurait tout aussi bien pu être nommé, comment faire face à la bien connue page blanche de Drupal. Je suis sûr que ce problème vous est déjà arrivé, vous retrouver nez à nez avec cette page, sans un mot d’explication. Pour comprendre ce qui se passe, quand on en est là et que l’on n’a pas accès aux logs du serveur, c’est mission impossible.

La façon la plus simple pour déboguer est d’afficher les erreurs PHP. D’ailleurs je suis convaincu de l’obligation pour tout développeur de travailler ainsi, vous verrez plus facilement les erreurs (même minimes) de votre code. On peut penser qu’une notice ou deux, par ci, par là ce n’est pas grave, mais lorsqu’elles commencent à s’additionner les unes aux autres, on dégrade les performances du site!

Method 1. La première chose à faire si vous avez accès au fichier php.ini de votre serveur, est de modifier les variables error_reporting, display_errors et display_startup_errors. Cela vous permettra lorsque vous développerez des scripts PHP hors Drupal de voir vos erreurs.

error_reporting = E_ALL
display_errors = On
display_startup_errors = On

Method 2. La deuxième solution consiste à modifier le fichier settings.php de Drupal

error_reporting(-1);
$conf['error_level'] = 2;
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

A partir de maintenant vous devriez voir les erreurs s’afficher. Attention ne faites surtout pas cette manipulation sur un site en production, mais uniquement sur vos postes de développement.

Cet article Drupal, Afficher les erreurs PHP. est apparu en premier sur Julien Dubreuil.

Mutlisite en développement

Bonjour,

Je débute avec Drupal et je rencontre un soucis au niveau configuration/installation :

J'ai bien compris qu'il fallait que je mette en place sites/sites.php, mais même si j'ai déclaré ce qu'il fallait (du moins je pense) ça ne fait pas ce que je souhaite :

Developpeur Drupal 7 - template et theming Drupal | Région de Grenoble

Bonjour,

nous recherchons une société/un développeur spécialisé(e) dans le théming et le déploiement de templates pour Drupal 7.

Les aplats/templates graphiques et différentes pages de vues ont été réalisés par nos infographistes en fonction de l'articulation du site web mettant en avant des produits dans un domaine professionnel précis.

Si vous êtes sur Grenoble ou dans sa proche région, êtes compétent sous Drupal 7 dans ces domaines :

Merci de bien vouloir contacter par courriel :

Chrystophe Oléon
Resp. Communication - FRANCE BUREAU (Grenoble)

Comment gérer l'affichage d'un module ?!

Bonjour, j'espère que vous pourrez m'aider parce que je suis dans une impasse !

J'ai développé un module qui est un simple formulaire.
Donc dans mon fichier .module j'ai un appel à hook_block_info, un appel à hook_block_view et mes fonctions de formulaire, à savoir mon_form et mon_form_submit.

Pour le développement, j'affichais simplement les IDs de mes objets.
Maintenant que le module fonctionne, je souhaiterai développé un peu plus l'affichage.

Par Artusamak
Julien Dubois

Info utile #2 – Simpletest et le multilinguisme

J’ai identifié un problème assez ennuyeux il y a quelques jours lorsque j’essayais de lancer des tests simpletests depuis un module du core, quelque soit le test déclenché, le batch plantait. Après vérification que la résolution du nom de ma VM se faisait bien localement, c’est la panne sèche, pas d’idée sur la cause du problème.

La cause du problème était pourtant sous mes yeux depuis le début, dans la barre d’adresse, ce petit préfixe qui traîne et qui ne paie pas de mine, en remplaçant le ‘fr’ par un ‘en’ ou en le supprimant, le problème s’est résolu.

Pensez-y si le problème vous arrive, la négociation de langue n’est pas compatible avec simpletest.

Par juliendubreuil
julien dubreuil
Drupal since 2009

Les hooks : connaître Drupal pour créer vos modules

Ce qu’il y a de bien avec Drupal c’est que l’on a l’impression de jouer aux lego, un module par ci, un module par là et le tout, imbriqué depuis l’interface d’administration de celui-ci. Mais comme moi, un jour vous avez voulu créer vous même vos structures et non plus seulement réaliser ce qu’il était possible de faire avec une simple boite de lego. Bref, vous avez déjà eu besoin de développer votre propre module afin de tordre le système et le faire coller à votre cahier des charges.

Cette nécessité de faire son propre module arrive bien plus vite qu’on ne le croit et c’est pour ça que je me suis dit qu’une petite liste des principales choses à connaître pour jouer avec Drupal serait utile. Du coup, j’ai essayé de me replacer quelques mois en arrière, à mes débuts avec Drupal et son api et je vous ai listé les principaux hooks que vous pourrez être amenés à utiliser au départ.

Concept et implémentation d’un hook

Avant d’aller plus loin, il y a une notion à comprendre pour développer un module avec Drupal et j’espère pour vous que vous avez déjà entendu ce mot : ‘hook’, sinon il va falloir réviser les bases de Drupal :p
Pour vous donner une bonne définition de ce qu’est un hook, rien de mieux que la documentation officielle.

Bon grossièrement, le système de hooks permet d’interagir avec le corps de Drupal et les modules installés, c’est tellement surpuissant que le module Chuck Norris utilise le concept de hook.

Un hook c’est quoi ? Un hook ce n’est ni plus ni moins qu’une fonction PHP nommée foo_bar(), ou “foo” désigne le nom de votre module (le nom du module serait donc foo.module) et “bar” le nom d’un hook spécifique. Chaque hook possède un nombre défini de paramètres et un résultat spécifique. Bref rien de compliqué si vous avez déjà programmé.

Oui mais concrètement comment ça marche ? Prenez l’exemple de la mise à jour d’un contenu. Vous faites des modifications et vous sauvegardez, Drupal va alors déclencher son processus de sauvegarde et afin que les modules puissent intervenir sur les données en cours, il va déterminer quel modules ont implémenté ce hook afin de leur donner la main.
Ce qu’il faut comprendre c’est que lorsqu’un hook est déclenché, Drupal parcourt tous les modules afin de connaître les modules voulant prendre la parole.

Si toutefois ce n’est toujours pas clair, voici la définition de wikipédia, mais je suis sûr qu’elle vous sera inutile :)

Les hooks à connaitre :

Vous l’aurez compris, pour maîtriser Drupal et en faire ce que vous voulez, il va vous falloir connaître les différents hooks à votre disposition. J’ai essayé ici de vous créer une petite liste de hooks qui vont vous permettre de débuter facilement, mais dîtes vous bien qu’il en existe beaucoup plus, je vous laisse le plaisir de les découvrir par vous même.

Note : Il y a eu plein d’évolutions entre D6 et D7 et l’une d’entre elle a consisté à diviser les hooks intervenant lors d’actions spécifiques. Par exemple le hook_nodeapi (que l’on verra par la suite) avait en D6 un deuxième paramètre nommé $op qui pouvait prendre différentes valeurs comme : load, insert, delete, view… Ainsi lorsque vous vouliez intervenir lors du chargement ou de la suppression d’un node, vous n’aviez qu’à implémenter ce hook et vérifier la valeur de la variable $op. Maintenant le hook_nodeapi n’existe plus, il a été remplacé par autant de hooks qu’il y avait d’actions. Grâce à cela, on a gagné en lisibilité du code mais on a augmenté le nombre de hooks disponibles. Ainsi plusieurs hooks que vous connaissiez en D6 ont été revus.

Gestion des blocs

Si vous utilisez Drupal, vous avez sûrement déjà dû créer un bloc depuis le back office. Comme souvent lorsqu’il est possible de faire quelque chose depuis l’interface d’administration, il est possible de le faire en code. Ainsi grâce à quelques hooks, il est facile de créer, gérer et de configurer les blocs.

hook_block_info : N’importe quel module peut ajouter des blocs, mais encore faut-il que drupal le sache, grâce à ce hook vous allez pouvoir déclarer l’ajout d’un ou de plusieurs blocs.

hook_block_view : Une fois que vous avez déclaré votre bloc il vous faut créer son contenu avec la fonction hook_block_view.

hook_block_configure : Pour chaque bloc vous pouvez ajouter un formulaire de configuration plus complet que celui fourni par défaut et pour cela il vous faut utiliser ce hook.

hook_block_save : Si vous avez mis en place le hook ci-dessus vous devez aussi utiliser le hook_bloc_save afin de sauvegarder les informations renseignées dans votre formulaire.

Liste des hooks liés aux blocs

Prenez vos contenus en main

Drupal étant un outil de gestion de contenus, vous vous doutez bien que c’est sur cette partie que l’on peut faire le plus de modifications :) Avec cette petite liste de hooks, vous trouverez forcément le bon moment pour interagir avec vos contenus.

hook_node_load – ce hook est exécuté lorsqu’un node est chargé depuis la base de données, c’est donc l’étape idéale si vous avez des données à modifier lors du chargement.

hook_node_view – à chaque fois que vous affichez un node sur votre site c’est le hook_view qui est invoqué. En gros c’est le hook que vous allez utiliser pour modifier le rendu à vos visiteurs.

hook_node_presave – c’est un hook utile puisqu’il permet d’intervenir sur les données juste avant la sauvegarde en base. Ce hook est appelé lors de l’insertion comme lors de la mise à jour.

hook_node_insert – le hook_node_insert est invoqué lors de la création du contenu en base et uniquement lors de la création

hook_node_update – à l’inverse celui-ci n’est invoqué que lors de la mise à jour du contenu.

hook_node_prepare – pour créer un nouveau contenu sur votre site vous devez utiliser le formulaire de création de contenus et justement le hook_node_prepare vous permet d’avoir la main sur celui-ci avant qu’il ne soit affiché à vos utilisateurs. Parfait si vous voulez remplir ou présélectionner des valeurs.

hook_node_delete : avec un nom si explicite, vous l’aurez compris qu’il s’agit du hook qui permet d’intervenir lorsqu’un contenu est supprimé.

Liste des hooks liés aux nodes

hook_permission : Dans la partie contenu on peut aussi y ajouter le hook_permission (connu sous le nom de hook_perm en D6) qui permet de créer de nouveaux droits d’accès que vous pourrez utiliser dans vos modules afin de restreindre ou non l’accès à vos fonctionnalités.

Les formulaires

hook_form_alter et hook_form_FORM_ID_alter : deux hooks qui ont leur importance puisque grâce à eux vous allez pouvoir modifier n’importe quel formulaire sur le site afin d’y ajouter des champs, ajouter des fonctions de validation ou encore altérer les données saisies.
Le hook_form_alter est appelé pour n’importe quel formulaire sur votre site, c’est à vous de savoir si vous êtes sur le formulaire souhaité. Si vous voulez modifier un formulaire en particulier, utilisez plutôt le deuxième hook qui ne sera invoqué que pour le FORM_ID précisé. Vous pouvez par exemple utiliser le hook_form_alter pour connaître la valeur de $form_id puis utiliser le hook_form_FORM_ID_alter.

L’administration de vos modules

Il y a trois hooks à connaître pour l’administration des modules, le hook_install et hook_uninstall qui vont de paire et le hook_update.

hook_install : ce hook est le premier invoqué lors de l’activation d’un module, c’est pendant cette étape que l’on doit par exemple installer les tables SQL nécessaires au module ainsi que la configuration par défaut de celui-ci.

hook_uninstall : C’est l’inverse du hook_install, celui-ci sert à supprimer tout ce qui touche au module, données en bases, schémas, variables… Notez que ce hook n’est pas exécuté à la désactivation du module mais lors de sa désinstallation.

hook_update_N : Le code d’un module n’est jamais figé et est souvent amené à évoluer. Grâce au hook_update_N vous allez pouvoir intervenir sur votre module afin de mettre à jour sa configuration, les données contenues dans ses tables ou même celles d’un autre module, (au passage, n’oubliez pas de mettre à jour le schéma de la base de données). N désigne le numéro de version à mettre et est découpé en 3 parties. Le premier chiffre correspond à la version de Drupal utilisé, le deuxième à la version de votre module et les deux derniers afin d’identifier les différentes mises à jour. Par exemple, la deuxième update d’un module en version 2.1 sur un Drupal 7 aura pour valeur : hook_update_7202
Pour installer vos mises à jour, il suffit de vous rendre sur la page /update.php ou alors d’utiliser les commandes Drush faites pour ça.

Gestion des urls de votre site

hook_menu : l’un des hooks les plus utilisés, mais bien que son nom évoque la gestion des menus, celui-ci permet en fait de créer de nouvelles urls sur votre site afin de mettre en place de nouvelles pages, de nouveaux formulaires ou n’importe quel service ayant besoin d’une adresse. C’est lors de la mise en place de ce hook que l’on peut utiliser le hook_permission afin de restreindre l’accès à une page en fonction d’un rôle.

hook_menu_alter : permet de modifier les propriétés de n’importe quelle url définie dans un hook_menu. Par exemple vous pouvez modifier, le titre d’une page, les droits d’accès, voir même surcharger la page callback.

Drupal et les hooks systems

hook_cron : ce hook vous permet d’exécuter des actions périodiques depuis votre Drupal, comme par exemple l’envoi de mail, la mise à jour de fichiers ou encore la génération de backup. Personnellement je préfère utiliser la cron du serveur plutôt que celle de Drupal, mais pour cela il faut avoir accès aux serveurs ce qui n’est pas possible sur un mutualisé.

hook_mail : c’est le hook à implémenter si vous voulez envoyer des emails via Drupal. Celui-ci permet aux modules de préparer des messages qui seront envoyés par la suite avec la fonction drupal_mail.

hook_mail_alter : permet de modifier les messages envoyés par les autres modules

Thème

hook_theme : recense toutes les fonctions de thème disponible sur votre site, ainsi lorsqu’un module doit implémenter une nouvelle fonction, il suffit de la déclarer au moyen de ce hook. Une fois connue par Drupal, celle-ci devient disponible à tout moment et peut être utilisée grâce à la fonction theme().


J’espère que cette liste et ces quelques explications sur le système de hook vous permettront de mieux comprendre et utiliser Drupal, il existe beaucoup plus de hook que ce qu’il y a dans cet article mais pour les découvrir il vous faudra explorer Drupal par vous même. En attendant vous trouverez ici la liste de tous les hooks que vous pourrez rencontrer avec Drupal 7

Cet article Les hooks : connaître Drupal pour créer vos modules est apparu en premier sur Julien Dubreuil.

Pages