Le manuel du développeur

From Ineation wiki

Jump to: navigation, search

Contents

Introduction et concepts de bases

Architecture de Drupal

Modules

Les modules du Core
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.

Thèmes

Concepts cruciaux

Noeuds

Utilisateurs

Block

Menu

Formulaires

Base de données

Les APIs

API Forms

API Schemas

Structure des fichiers

.info

.module

.install

Pas à Pas : un premier module

Introduction

La base, le fichier .info

Un fichier .module basique

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

Installation du module

Mise en place et activation

Remplissage et donnée dynamique

Modification de block_hook

Mise en forme du contenu

Filtre, actions, et Hook

Les profils d'installation

Les modules contribs

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, ....).

tinyMCE

http://drupalfr.org/node/3801

Personal tools