Drupal 7 – Surcharger des fonctions de theme pour ajouter des balises

Posted by on Oct 10, 2012 in Drupal, PHP | No Comments

S’il y a une chose dont j’ai souvent besoin quand je travaille sur Drupal, c’est bien de rajouter mes propre balises ou classe dans des éléments générés par le coeur de Drupal ou des modules téléchargés. Le fait de pouvoir ajouter des balises ou des classes à ces éléments permet de faire un theming bien plus poussé, ce qui est souvent nécessaire. Alors comment faire pour ajouter facilement vos balises à des éléments que vous ne générez pas vous-même ?

La fonction (hook) theme()

La fonction theme() est un hook de Drupal, c’est comme son nom l’indique, une fonction qui va s’occuper de mettre en forme un ou plusieurs éléments à afficher : Par exemple la fonction theme_form() qui s’occupe de générer le HTML à afficher lors de l’utilisation d’un formulaire (on la trouve dans includes>form.inc).

Si vous voulez par exemple encapsuler vos formulaires avec une balise <div> voici comment procéder :

  1. Trouver la fonction theme qui se charge de l’affichage (pour form c’est dans  includes>form.inc)
  2. Ouvrir le fichier template.php de votre theme et copier la fonction theme
  3. Modifier le nom de la fonction en remplaçant le mot theme par le nom de votre theme (par exemple votre_nom_form())
  4. Enfin, modifier le code pour rajouter votre balise

Voici un exemple du code à retrouver dans template.php :

Il est possible de faire ça avec toutes les fonctions (hook) theme(), que ce soit les vôtres, ceux de modules téléchargés, ou ceux du coeur de Drupal 7. Vous pouvez faire plus de choses que simplement rajouter un div mais vous ne devez toucher qu’à l’affichage, pour faire des opérations sur les données mieux vos utiliser les fonctions de préprocess (j’y reviendrais).

Les fichiers de template

A la place des fonctions de theme, il est possible d’utiliser des fichiers de template (les .tpl.php). Ces fichiers permettent également de faire du theming mais un peu différemment, en effet, en fonction de leur noms, ils seront utilisés pour afficher un élément.

Par exemple le fichier user-login.tpl.php que vous pouvez placer dans votre theme sera utilisé pour afficher le formulaire de login. Je ne vais pas m’étendre sur le sujet d’autres sites le font mieux que moi et la documentation est plutôt bien faite. sur le sujet du theming je vous conseil de lire ça.

Avec ce système vous pouvez donc également ajouter un div à l’affichage, en reprenant le fichier .tpl qui se charge de l’affichage d’origine et en le surchargeant par le votre (dans votre theme).  Si c’est un hook theme qui est utilisé à l’origine pour l’affichage, on utilise la méthode 1 et si c’est un fichier tpl qui se charge de l’affichage on utilise la méthode 2.