Drupalcamp organization DOs and DON'Ts
What you should (or shouldn't) do when organizing a Drupalcamp.
What you should (or shouldn't) do when organizing a Drupalcamp.
Si vous avez manqué la présentation sur les outils NoSQL dans Drupal à l'occasion de Drupagora et si vous trouvez que les slides sans les commentaires sont un peu arides, n'hésitez pas à faire le déplacement jusqu'à Toulouse pour DrupalCamp Toulouse ce weekend, où elle sera proposée une deuxième fois.
Inscrivez-vous sur http://toulouse2011.drupalcamp.fr/ et rejoignez-nous pour les talks du samedi et/ou les ateliers du dimanche: s'il y a suffisamment d'intéressés, nous tenterons de démarrer des participations sur l'initiative WSCCI de Drupal 8.
Cet article fait suite au précédent post : « Comment créer et appliquer des styles d’images avec Drupal 7 via l’UI » ou je vous détaillais comment, via l’interface d’administration, créer un style d’image. Aujourd’hui le sujet reste le même, mais la création sera faite par la programmation.
Si comme moi, vous êtes confrontés à maintenir à jour des sites Drupal, vous avez déjà dû vous poser tout un tas de questions sur la pérennisation des configurations et de ce fait, vous vous êtes résignés à faire vos modifications directement depuis l’interface d’administration. Du coup, pour chaque chose simple qu’il est possible de faire via le back-office de Drupal, il faut trouver comment le faire en code.
Ainsi, sur la même base que l’article précédent, voici comment créer et appliquer un style d’image par la programmation.
La solution la plus simple consiste à implémenter le hook_image_default_styles() fourni par le module image, qui permet de définir un ou plusieurs style(s) d’images à Drupal dans votre fichier .module.
function sandbox_image_default_styles() { // La variable $style est un tableau et chaque composant sera un nouveau style. $styles = array(); // La clé du tableau sera le nom machine de votre style. Pour qu’il n’y ait pas de soucis contentez-vous de caractères alphanumériques, d’underscores et de tirets. $styles['image_style_example'] = array(); // Pour chaque style pour pouvez ajouter plusieurs effets $styles['image_style_example']['effects'] = array( // Premier effet à appliquer à l’image array( 'name' => 'image_rotate', 'data' => array( 'degrees' => 2, 'random' => 0, 'bgcolor' => '#CECECE', ), 'weight' => 0, ), // Deuxième effet array( 'name' => 'image_scale', 'data' => array( 'width' => 200, 'height' => 200, 'upscale' => 1, ), 'weight' => 1, ), ); return $styles; }
On ne peut plus simple non ? Vous trouverez toutes les informations concernant les effets de base disponibles dans le fichier image.effects.inc du module image.
Voici d’autres fonctions utiles si vous souhaitez intervenir sur les différents styles d’images :
- image_styles : pour récupérer tous les styles d’images.
- image_style_load : pour charger et obtenir les informations d’un style.
- image_style_save : pour sauvegarder un style (après une mise à jour par exemple).
- image_style_delete : pour supprimer un style
Si toutefois vous n’avez pas trouvé votre bonheur dans ces fonctions, voici toutes les fonctions et méthodes implémentées par le module images
Pour appliquez un style d’image à une image il suffit simplement d’utiliser la fonction de thème : theme_image_style($variables).
$variables est un tableau composé de différents éléments :
- style_name: le nom du style que vous voulez appliquer
- path: Le chemin de l’image relatif au système de fichier de Drupal. (ex : public://mon-image.jpg)
- alt: un text alternatif au cas où l’image ne pourrait pas être affichée.
- title: Le titre de votre image. Celui-ci sera affiché lorsque l’image sera survolée
- attributes: un tableau associatif bien connu des fonctions de thème permettant de passer des attributs à la baslise img, tel que des class css…
Notez que votre image doit se trouver sur votre site, car cela ne fonctionne pas avec une image externe.
// Récupération de l’adresse de l’image.
$path = "images/funny_cat.jpg"; // Qui à pour adresse sites/default/files/images/funny_cat.jpg // Transformation de celle-ci. $uri = (file_build_uri($path)); // Génération de notre image. $image = theme('image_style', array( 'path' => $uri, 'style_name' => 'image_style_example'));
Et voila vous venez de créer et appliquer un style via la programmation !
Cet article Comment créer et appliquer des styles d’images avec Drupal 7 via le code est apparu en premier sur Julien Dubreuil.
Cet article fait suite au précédent post : “Comment créer et appliquer des styles d’images avec Drupal 7 via l’UI” ou je vous détaillais comment, via l’interface d’administration, créer un style d’image. Aujourd’hui le sujet reste le même, mais la création sera faite par la programmation.
Si comme moi, vous êtes confrontés à maintenir à jour des sites Drupal, vous avez déjà dû vous poser tout un tas de questions sur la pérennisation des configurations et de ce fait, vous vous êtes résignés à faire vos modifications directement depuis l’interface d’administration. Du coup, pour chaque chose simple qu’il est possible de faire via le back-office de Drupal, il faut trouver comment le faire en code.
Ainsi, sur la même base que l’article précédent, voici comment créer et appliquer un style d’image par la programmation.
La solution la plus simple consiste à implémenter le hook_image_default_styles() fourni par le module image, qui permet de définir un ou plusieurs style(s) d’images à Drupal dans votre fichier .module.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<span class='line'><span class="k">function</span> <span class="nf">sandbox_image_default_styles</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'> <span class="c1">// La variable $style est un tableau et chaque composant sera un nouveau style.</span>
</span><span class='line'> <span class="nv">$styles</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
</span><span class='line'> <span class="c1">// La clé du tableau sera le nom machine de votre style. Pour qu’il n’y ait pas de soucis contentez-vous de caractères alphanumériques, d’underscores et de tirets.</span>
</span><span class='line'> <span class="nv">$styles</span><span class="p">[</span><span class="s1">'image_style_example'</span><span class="p">]</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
</span><span class='line'> <span class="c1">// Pour chaque style pour pouvez ajouter plusieurs effets</span>
</span><span class='line'> <span class="nv">$styles</span><span class="p">[</span><span class="s1">'image_style_example'</span><span class="p">][</span><span class="s1">'effects'</span><span class="p">]</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'> <span class="c1">// Premier effet à appliquer à l’image</span>
</span><span class='line'> <span class="k">array</span><span class="p">(</span>
</span><span class='line'> <span class="s1">'name'</span> <span class="o">=></span> <span class="s1">'image_rotate'</span><span class="p">,</span>
</span><span class='line'> <span class="s1">'data'</span> <span class="o">=></span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'> <span class="s1">'degrees'</span> <span class="o">=></span> <span class="mi">2</span><span class="p">,</span>
</span><span class='line'> <span class="s1">'random'</span> <span class="o">=></span> <span class="mi">0</span><span class="p">,</span>
</span><span class='line'> <span class="s1">'bgcolor'</span> <span class="o">=></span> <span class="s1">'#CECECE'</span><span class="p">,</span>
</span><span class='line'> <span class="p">),</span>
</span><span class='line'> <span class="s1">'weight'</span> <span class="o">=></span> <span class="mi">0</span><span class="p">,</span>
</span><span class='line'> <span class="p">),</span>
</span><span class='line'> <span class="c1">// Deuxième effet</span>
</span><span class='line'> <span class="k">array</span><span class="p">(</span>
</span><span class='line'> <span class="s1">'name'</span> <span class="o">=></span> <span class="s1">'image_scale'</span><span class="p">,</span>
</span><span class='line'> <span class="s1">'data'</span> <span class="o">=></span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'> <span class="s1">'width'</span> <span class="o">=></span> <span class="mi">200</span><span class="p">,</span>
</span><span class='line'> <span class="s1">'height'</span> <span class="o">=></span> <span class="mi">200</span><span class="p">,</span>
</span><span class='line'> <span class="s1">'upscale'</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span>
</span><span class='line'> <span class="p">),</span>
</span><span class='line'> <span class="s1">'weight'</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span>
</span><span class='line'> <span class="p">),</span>
</span><span class='line'> <span class="p">);</span>
</span><span class='line'> <span class="k">return</span> <span class="nv">$styles</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span>
On ne peut plus simple non ? Vous trouverez toutes les informations concernant les effets de base disponibles dans le fichier image.effects.inc du module image.
Voici d’autres fonctions utiles si vous souhaitez intervenir sur les différents styles d’images :
Si toutefois vous n’avez pas trouvé votre bonheur dans ces fonctions, voici toutes les fonctions et méthodes implémentées par le module images
Pour appliquez un style d’image à une image il suffit simplement d’utiliser la fonction de thème : theme_image_style($variables).
$variables est un tableau composé de différents éléments :
– style_name: le nom du style que vous voulez appliquer
– path: Le chemin de l’image relatif au système de fichier de Drupal. (ex : public://mon-image.jpg)
– alt: un text alternatif au cas où l’image ne pourrait pas être affichée.
– title: Le titre de votre image. Celui-ci sera affiché lorsque l’image sera survolée
– attributes: un tableau associatif bien connu des fonctions de thème permettant de passer des attributs à la baslise img, tel que des class css…
Notez que votre image doit se trouver sur votre site, car cela ne fonctionne pas avec une image externe.
1
2
3
4
5
6
<span class='line'><span class="c1">// Récupération de l’adresse de l’image. </span>
</span><span class='line'><span class="nv">$path</span> <span class="o">=</span> <span class="s2">"images/funny_cat.jpg"</span><span class="p">;</span> <span class="c1">// Qui à pour adresse sites/default/files/images/funny_cat.jpg</span>
</span><span class='line'><span class="c1">// Transformation de celle-ci.</span>
</span><span class='line'><span class="nv">$uri</span> <span class="o">=</span> <span class="p">(</span><span class="nx">file_build_uri</span><span class="p">(</span><span class="nv">$path</span><span class="p">));</span>
</span><span class='line'><span class="c1">// Génération de notre image.</span>
</span><span class='line'><span class="nv">$image</span> <span class="o">=</span> <span class="nx">theme</span><span class="p">(</span><span class="s1">'image_style'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span> <span class="s1">'path'</span> <span class="o">=></span> <span class="nv">$uri</span><span class="p">,</span> <span class="s1">'style_name'</span> <span class="o">=></span> <span class="s1">'image_style_example'</span><span class="p">));</span>
</span>
Et voila vous venez de créer et appliquer un style via la programmation !
Participez à Capitole du libre, l'évènement
du logiciel libre à Toulouse les samedi 26 et dimanche 27 novembre ! Capitole du Libre regroupera 3 thématiques : L'Ubuntu party, pour découvrir et
approfondir les logiciels libres, L'Akademy-fr, le rendez-vous de la
communauté française de KDE, Le Drup
Présentation sur l'état de l'art en matière de technologies NoSQL en environnement Drupal, données le 2011-11-10 à l'occasion de la conférence Drupagora.
Si vous voulez supprimer un éditeur Wysiwyg d'un textarea de vote formulaire, par exemple pour remplir des données dans une interface administrateur, il suffit de rajouter la ligne suivante :
<span style="color: #000000;"><strong><span style="color: #dd0000;">'#wysiwyg' </span><span style="color: #007700;">=> </span><span style="color: #0000bb;">false<br /> <br /> <br /> </span></strong></span>
Exemple :
<span style="color: #000000;"><span style="color: #0000bb;">$form</span><span style="color: #007700;">[</span><span style="color: #dd0000;">'textarea_field'</span><span style="color: #007700;">] = array(<br /> </span><span style="color: #dd0000;">'#type' </span><span style="color: #007700;">=> </span><span style="color: #dd0000;">'textarea'</span><span style="color: #007700;">,</span></span>
Depuis Drupal 7 la gestion des images et des styles d’images est native, ainsi donc plus besoin d’installer le module imagecache pour retailler, pivoter ou encore redimensionner vos photos.
Une fois créée, vous pourrez appliquer vos styles sur n’importe quelle photo, qu’elle soit affichée dans le contenu d’un node ou encore dans le rendue d’une vue. La manip’ est vraiment simple et permet de décliner une photo en une quantité indéfinie de possibilité.
Voici donc un petit guide pour vous montrer comment ajouter de nouveaux styles d’images via l’interface de Drupal et comment vous en servir.
Première étape, rendez-vous sur la page d’administration des styles d’images Administration » Configuration » Media et cliquez sur Image styles. Cliquez sur le lien au dessus des trois styles d’images par défaut nommé Add style, et insérez un titre à votre style d’image. Petit conseil, soyez explicite sur les noms, car plus vous en aurez, plus cela deviendra difficile de vous y retrouver.
Deuxième étape, l’ajout d’effets aux images et pour cela vous avez à votre disposition 6 choix :
- Crop : découpe l’image selon une certaine dimension.
- Desaturate : désature l’image.
- Resize : retaille l’image.
- Rotate : retourner l’image en fonction d’un angle.
- Scale : retaille l’image en gardant les proportions.
- Scale and crop : retaille et découpe l’image.
Choisissez l’effet désiré, entrez les dimensions voulus et sauvegardez.
Troisième étape, la visualisation des résultats. Une fois votre effet validé, vous vous retrouvez sur la page de votre nouveau style d’image. En haut de celle-ci se trouve deux images afin de voir le résultat de votre effet. A gauche l’image original et à droite l’image transformée.
Derniere étape, cliquez sur Update style pour valider les modifications effectuées et pour sauvegarder votre nouveau style que vous retrouvez pour mettre en forme chaque champ image
Dans le cas d’un contenu, rendez-vous la page de gestion de l’affichage des champs : Administration » Structure » Content types et cliquez sur Manage display, pour le type de contenu de votre choix. Cliquez ensuite sur la petite icône en forme d’engrenage qui devrait se trouver à droite sur la ligne de votre champ image.
Sélectionnez le style de votre choix, cliquez sur le bouton update et votre style sera maintenant appliqué à ce champ. Pour visualiser les résultat rendez-vous sur la page de votre contenu et voila.
Cet article Comment créer et appliquer des styles d’images avec Drupal 7 via l’UI est apparu en premier sur Julien Dubreuil.
Depuis Drupal 7 la gestion des images et des styles d’images est native, ainsi donc plus besoin d’installer le module imagecache pour retailler, pivoter ou encore redimensionner vos photos.
Une fois créée, vous pourrez appliquer vos styles sur n’importe quelle photo, qu’elle soit affichée dans le contenu d’un node ou encore dans le rendue d’une vue. La manip’ est vraiment simple et permet de décliner une photo en une quantité indéfinie de possibilité.
Voici donc un petit guide pour vous montrer comment ajouter de nouveaux styles d’images via l’interface de Drupal et comment vous en servir.
Première étape, rendez-vous sur la page d’administration des styles d’images Administration » Configuration » Media et cliquez sur Image styles. Cliquez sur le lien au dessus des trois styles d’images par défaut nommé Add style, et insérez un titre à votre style d’image. Petit conseil, soyez explicite sur les noms, car plus vous en aurez, plus cela deviendra difficile de vous y retrouver.
Deuxième étape, l’ajout d’effets aux images et pour cela vous avez à votre disposition 6 choix :
– Crop : découpe l’image selon une certaine dimension.
– Desaturate : désature l’image.
– Resize : retaille l’image.
– Rotate : retourner l’image en fonction d’un angle.
– Scale : retaille l’image en gardant les proportions.
– Scale and crop : retaille et découpe l’image.
Choisissez l’effet désiré, entrez les dimensions voulus et sauvegardez.
Troisième étape, la visualisation des résultats. Une fois votre effet validé, vous vous retrouvez sur la page de votre nouveau style d’image. En haut de celle-ci se trouve deux images afin de voir le résultat de votre effet. A gauche l’image original et à droite l’image transformée.
Derniere étape, cliquez sur Update style pour valider les modifications effectuées et pour sauvegarder votre nouveau style que vous retrouvez pour mettre en forme chaque champ image
Dans le cas d’un contenu, rendez-vous la page de gestion de l’affichage des champs : Administration » Structure » Content types et cliquez sur Manage display, pour le type de contenu de votre choix. Cliquez ensuite sur la petite icône en forme d’engrenage qui devrait se trouver à droite sur la ligne de votre champ image.
Sélectionnez le style de votre choix, cliquez sur le bouton update et votre style sera maintenant appliqué à ce champ. Pour visualiser les résultat rendez-vous sur la page de votre contenu et voila.
Vous avez besoin d'un menu nice menu qui s'ouvre à droite ou à gauche en fonction de sa position dans la page, et de la largeur du navigateur?
Voilà la solution :
Vous ajoutez votre menu, avec ouveture vers la gauche. Puis, vous rajouter le Javascript suivant dans votre thème (ou alors, vous incluez le fichier JS mis en attachement) :
Attention : #nice-menu-1 est à changer suivant le menu que vous voulez modifier !
$("#nice-menu-1 .menuparent").bind('mouseover',function(){
if (($(this).offset().left+$(this).outerWidth()+$(this).children("ul:first").outerWidth()) > $("body").outerWidth()) {
$(this).children("ul:first").css({left:'-'+$(this).outerWidth()+'px'});
}
else {
Drupal use a lot of caches at different levels but all of them are by default stored in the database
Drupal use a lot of caches at different levels but all of them are by default stored in the database
Au coeur de votre stratégie web : Le CMS, outil d'édition et de publication de contenus !
Le magazine de développement PHP PHP Solutions Magazine vient de publier un numéro spécial consacré à Drupal 7, principalement centré sur les techniques de développement.
Fidèle à son rôle significatif au sein de la communauté Drupal, plus particulièrement dans la région de Montréal, Koumbit est fier de contribuer, pour une quatrième année consécutive, à l'organisation et à la commandite du DrupalCamp de Montréal. Le prochain camp se déroulera dans quelques jours seulement, du 16 au 18 septembre, et il sera précédé, du 14 au 16 septembre, d'un sprint de code de trois jours sur le multilinguisme dans Drupal 8.
Koumbit agit par conviction.
Koumbit croit que le logiciel libre est un outil d'affranchissement personnel et collectif. Le libre nous permet d'offrir des solutions éthiques et précieuses pour nos clients en créant des opportunités économiques durables pour la création de services et d'emplois. D'une certaine manière, le logiciel libre nous permet de développer et de nous approprier les «moyens de production de l'ère de l'information».
Koumbit croit en Drupal. Dès le début, nous avons reconnu son potentiel et nous lui avons fait une place de choix au coeur de nos activités. Après sept ans, ce choix nous apparait toujours pertinent.
Koumbit croit à l'intiative communautaire. Ce que accomplissons ensemble est bien plus intéressant que lorsque nous sommes isolés. Une bande de pigistes se sont réunis un jour autour de leur conviction commune que l'action collective était la voie de l'avenir. Ils ont créé quelque chose de plus grand que la somme de ses parties. Ils l'ont appelé «Koumbit». Depuis, ce collectif travaille à faire mieux qu'une compagnie qui réussit dans un marché limité. Nous, ce collectif, veillons à contribuer au progrès social.
Koumbit croit en vous. Que vous vouliez apprendre, enseigner, programmer ou inspirer, joignez-vous à nous pour ce qui promet être le meilleur Drupal Camp de Montréal jusqu'ici.
Fidèle à son rôle significatif au sein de la communauté Drupal, plus particulièrement dans la région de Montréal, Koumbit est fier de contribuer, pour une quatrième année consécutive, à l'organisation et à la commandite du DrupalCamp de Montréal. Le prochain camp se déroulera dans quelques jours seulement, du 16 au 18 septembre, et il sera précédé, du 14 au 16 septembre, d'un sprint de code de trois jours sur le multilinguisme dans Drupal 8.
Koumbit agit par conviction.
Koumbit croit que le logiciel libre est un outil d'affranchissement personnel et collectif. Le libre nous permet d'offrir des solutions éthiques et précieuses pour nos clients en créant des opportunités économiques durables pour la création de services et d'emplois. D'une certaine manière, le logiciel libre nous permet de développer et de nous approprier les «moyens de production de l'ère de l'information».
Koumbit croit en Drupal. Dès le début, nous avons reconnu son potentiel et nous lui avons fait une place de choix au coeur de nos activités. Après sept ans, ce choix nous apparait toujours pertinent.
Koumbit croit à l'intiative communautaire. Ce que accomplissons ensemble est bien plus intéressant que lorsque nous sommes isolés. Une bande de pigistes se sont réunis un jour autour de leur conviction commune que l'action collective était la voie de l'avenir. Ils ont créé quelque chose de plus grand que la somme de ses parties. Ils l'ont appelé «Koumbit». Depuis, ce collectif travaille à faire mieux qu'une compagnie qui réussit dans un marché limité. Nous, ce collectif, veillons à contribuer au progrès social.
Koumbit croit en vous. Que vous vouliez apprendre, enseigner, programmer ou inspirer, joignez-vous à nous pour ce qui promet être le meilleur Drupal Camp de Montréal jusqu'ici.
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.
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
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.
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
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.
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.
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.
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.
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
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.
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.
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 :)
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.
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
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.
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.
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.
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.
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
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