Le manuel du développeur

From Ineation wiki

Jump to: navigation, search

Contents

[edit] Introduction et concepts de bases

[edit] Architecture de Drupal

[edit] Modules

[edit] Les modules du Core
[edit] Les "Hooks"

Les "hooks" ou crochets en français, sont la base de la communication entre les modules Drupal. Pour les habitués des autres environnements de développement les hooks sont des callback ou des evenements, au même titre que les "slots" & "signals" dans QT.

Un hook est donc une fonction qui est définie par la nomenclature Drupal. On doit implémenter un hook dans son module qui sera invoqué par Drupal au moment voulu. Le but est de donner à tout module le povoir d'interagir à tous les niveaux avec les autres modules. Par exemple, le module TinyMCE modifie les champs textarea pour les transformer grace au JavaScript en des éditeurs HTML riches. Ceci est possible parce que TinyMCE s'enregistre auprès de Drupal pour etre averti lorsque tout formulaire est sur le point d'être affiché. Ainsi, il parcours tous les éléments d'un form et décore tous les textareas (sauf ceux qui auraient été exclus par la configuration du module) avec du JavaScript affichant l'éditeur de texte riche.

Pour implémenter un hook le module doit déclarer une fonction qui commence toujours avec le nom du module et se termine avec le nom du hook. Exemple, si dans votre module "bidule" vous voulez implémenter le hook comment, il faut déclarer la fonction bidule_comment. Les paramètres sont ceux qui sont définis dans le module comment, créateur du hook. Tous les hooks core sont plutôt bien documentés dans la doc API. Il n'en va pas de même pour les hooks créés par les modules des contributeurs, parfois pauvres en documentation ou avec une documentation éparpillée à travers divers sites.

Décortiquons un hook, le hook comment.

La déclaration du hook en tant que tel se fait dans le module core, comment. Dans le fichier comment.module on trouve la déclaration de cette fonction :

function comment_invoke_comment(&$comment, $op) {
 $return = array();
 foreach (module_implements('comment') as $name) {
   $function = $name .'_comment';
   $result = $function($comment, $op);
   if (isset($result) && is_array($result)) {
     $return = array_merge($return, $result);
   }
   else if (isset($result)) {
     $return[] = $result;
   }
 }
 return $return;
}

On voit très clairement que la fonction appelle à tour de rôle tous les modules qui implémentent - module_implements('comment') - une fonction se terminant par _comment. Pour chaque appel elle fournit 2 variables, reçues en paramètres : $comment (référence vers l'objet commentaire) et $op qui décrit l'opération effectuée.

[edit] Thèmes

[edit] Concepts cruciaux

[edit] Noeuds

[edit] Utilisateurs

[edit] Block

[edit] Menu

[edit] Formulaires

[edit] Base de données

[edit] Les APIs

[edit] API Forms

[edit] API Schemas

[edit] Structure des fichiers

[edit] .info

[edit] .module

[edit] .install

[edit] Pas à Pas : un premier module

[edit] Introduction

[edit] La base, le fichier .info

[edit] Un fichier .module basique

[edit] [trouver une idée d'un module tout simple, pour démo]

[edit] Installation du module

[edit] Mise en place et activation

[edit] Remplissage et donnée dynamique

[edit] Modification de block_hook

[edit] Mise en forme du contenu

[edit] Filtre, actions, et Hook

[edit] Les profils d'installation

[edit] Les modules contribs

[edit] RTE (Rich Text Editor)

Un RTE est un éditeur de texte amélioré, c'est à dire qu'on peut y gérer la mise en forme (mise en gras, italique, ....).

[edit] tinyMCE

http://drupalfr.org/node/3801

Personal tools