Créer des templates (fichier.tpl.php) pour themer vos modules

Lors de la création de vos modules vous pouvez être amenés à mettre en forme votre contenu pour garder une approche cohérence avec la dissociation fond / forme. Il est donc nécessaire de donner la possibilité au themer de pouvoir modifier la mise en forme du contenu que vous aller afficher.
Afin de rendre une telle action possible, vous allez devoir déclarer au sein de votre module un hook_theme, qui va déclarer les éléments qui pourront être themés via vos templates.
Le hook_theme est simplement constitué d’un tableau d’éléments skinnables avec pour chaque entrée une clé « template » qui correspond au nom du fichier .tpl.php utilisé pour le theme et une clé « arguments » correspondant à un tableau de paramètres à passer à la fonction de theme().

function hook_theme() {
  return array(
    'my_themeable_call' => array(
      'template' => 'gabarit.tpl.php',
      'arguments' => array("param1" => NULL),
    ),
  );
}

A noter : Le « .tpl.php » est facultatif car toujours suggéré par le moteur de template et il est recommandé d’utiliser le même nom comme clé et comme nom de fichier pour le template. (Les noms sont ici différents pour vous permettre de décortiquer la mécanique). [Merci Cyril pour la remarque]

Voilà votre fonction de thème déclarée, il ne reste plus qu’à l’utiliser.
Prenons l’exemple d’un bloc, vous souhaitez utiliser votre fonction de thème dans son contenu, il vous suffit d’utiliser dans le contenu du bloc (cf hook_block) votre fonction de theme : $bloc[‘content’] = theme(‘my_themeable_call’, $param1);
De cette façon vous enverrez à votre fichier de template la variable $param1 (pouvant contenir tout type de données). Si vous omettez de passer un argument, la valeur par défaut déclarée dans le hook_theme sera utilisée (dans notre exemple si j’omets $param1, sa valeur sera NULL).

Plaçons-nous maintenant dans notre fichier de template gabarit.tpl.php, c’est le fichier que votre themer pourra surcharger en le copiant collant dans le dossier de son thème.
Les variables à disposition sont celles que vous avez passé en paramètres lors de l’appel de la fonction de thème (ici $param1) et les éventuelles variables ajoutées par les fonctions de preprocess. (La signature de la fonction est template_preprocess_my_themeable_call, surchargeable par THEME_preprocess_my_themeable_call).

De cette façon vous pouvez donc créer vos propres fichiers de theming lors de la publication de vos modules afin de vous faire adorer par les themers !

tag

9 thoughts on “Créer des templates (fichier.tpl.php) pour themer vos modules

  1. À noter qu’il n’est pas nécessaire de saisir le « .tpl.php » dans « template » (car celui-ci suggère le moteur de template et il se peut qu’on n’utilise pas forcément phptemplate).

    De même, il est conseillé d’utiliser le même nom de fichier que le nom du thème afin de faciliter la surcharge par d’autres modules. Exemple pour le theme my_themeable_call le template sera my-themeable-call

  2. merci pour l’article,

    A noter que la variable ‘template’ est un chemin, on peut donc placer tout ses tpl.php dans un sous-dossier du module, et ecrire:
    ‘template’ => ‘mon_dossier/mon_template.tpl.php’,

    pratique si vous comptez avoir de nombreux fichiers tpl.php

    opi

  3. Salút,
    Je cherche de l’aide.
    Je veux savoir comment importer une variable depuis un tpl.php pour l’utiliser dans un autre template.
    Par exemple: advanced_forum_module,
    je veux importer une variable existant dans un tpl.php et l’utiliser dans un autre parce qu’elle ny est pas definie.
    Merci !

  4. Tu ne peux pas passer de variable d’un .tpl à un autre à moins qu’ils ne soient l’un dans l’autre.
    Il te faudra donc dupliquer la façon de récupérer ta variable.

  5. Bonjour,

    j’ai crée un formulaire lié à ma base de donnée mais lors de l’envoi par mail aux utilisateurs,j’ai besoin de changer le code du formulaire en template mais j’ai aucune idée à propos la création des templates.SVP quelqu’un m’aider !!!!!!!

Comments are closed.