API Drupal : un exemple d'utilisation du hook theme

API Drupal : un exemple d'utilisation du hook theme

Drupal a une API très riche qui permet de faire des choses intéressantes notamment, la customisation du rendu d’un affichage ou du résultat d’un calcul. Cela est possible en parti grâce à hook_theme().

C'est quoi hook_theme()  ?

hook_theme() est un hook parmi les nombreux hooks de l’API de Drupal. Il permet de définir des fonctions et des templates qui sont destinées à être exécutées via la fonction theme().

Avec hook_theme() on peut tout cutomiser ! Par exemple, générer la template d’une newsletter avant de l’envoyer, aussi bien que la fonction qui permet d’envoyer cette newsletter.

Illustration !

/**
 * @file adcom_newsletter.module
 *
 * Adcom Newsletter : Exemple de création et d’envoi d’une newsletter 
 * avec hook_theme()
 *
 * Version : D7 
 */

/**
 * Implémentation de hook_theme()
 */ 
function adcom_newsletter_theme($existing, $type, $theme, $path){
 return array(
  'adcom_newsletter_format_newsletter' => array(
   'template' => 'newsletter',		
  ),		
 );
}

/**
 * Implémentation de hook_submit()
 */ 
function adcom_newsletter_form_submit($form, &$form_state){
 // Formattage de la newsletter
 $newsletter = theme('adcom_newsletter_format_newsletter');
 
 $headers = 'Content-Type: text/html; charset=UTF-8; format=flowed; delsp=yes';	
  
 // Envoi de la newsletter par mail
 mail($form_state['values']['email'], 'Démo newsletter autodidactique.com', 
      $newsletter, $headers);

 return $form;
}

Nous venons de définir deux fonctions. Une fonction adcom_newsletter_format_newsletter() dans le hook_theme qui permettra de formater la newsletter avant de l'envoyer et une autre, adcom_newsletter_form_submit() qui se chargera d'envoyer la newsletter préformattée à chaque envoi du formulaire (visible dans la démo).

Par ailleurs, c'était un exemple d’implémention de  hook_theme() mais vous pouvez en faire une autre utilisation pour customiser par exemple :

  • vos blocks
  • l’inteface de login
  • tout ! :)

 

Démo

Ceci est une démo, en aucun cas votre adresse e-mail ne sera enregistrée dans notre base. Vous allez simplement recevoir un mail après avoir cliqué sur "Recevoir la newsletter".

6 + 5 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.

 

Téléchargement

Pour mieux comprendre comment fonctionne tout le bordel, vous pouvez télécharger la version complète du module utilisée dans l’exemple.

 

A votre tour 

Avez vous déjà utilisé le hook_theme() dans d'autres situations ? 

 

0

Dites ce que vous pensez, laissez un commentaire !