'>

Le theming dans un module de drupal

Surcharger le thème d'un content type dans un module
Voici une astuce pour avoir la possibilité de fournir un fichier template pour un content type dans un module.
Tout en laissant la possibilité au thème de le surcharger.
<?php/**
* Implementation of hook_theme()
*/
function mymodule_theme($existing, $type, $theme, $path) {
 
$themes = array(
   
'node' => array(
     
'template' => 'node-story',
    ),
  );
  return $themes;
}
?>
Il est important de laisser la clef 'node' en place, ensuite il me suffit d'avoir un fichier node-story.tpl.php à la racine de votre module et ça marche.
Si vous avez beaucoup de fichiers templates à fournir, ou juste envie de ranger tout cela ailleurs, il suffit d'utiliser l'option 'path' pour définir un nouveau chemin où chercher les templates.
<?php/**
* Implementation of hook_theme()
*/
function mymodule_theme($existing, $type, $theme, $path) {
 
$themes = array(
   
'node' => array(
     
'template' => 'node-story',
      
// le $path en arguement contient le chemin vers le module (sites/all/modules/mymodule par exemple)
     
'path' => $path ."/templates/",
    ),
  );
  return $themes;
}
?>
Ensuite rien n'empêche un intégrateur de copier votre proposition de template et de la mettre dans son thème pour la surcharger.
C'est souvent utile dans un développement de thème et de project très custom (J'ai personnellement utilisé ce système pour France 24 et RFI où nous avons pu nous en servir pour gérer un thème de base dans des modules génériques puis le surcharger pour chaque site dans les modules spécifiques)