Drupal, Personnaliser, Variables – Créer des variables sur mesure dans Drupal 6
L’idée est de créer des variables sur mesure dans votre thème Drupal 6 afin de nettoyer votre code pour qu’il soit plus facile à manipuler et à comprendre. C’est aussi une manière de créer ce que nous nommons ironiquement chez Hecube un thème “couture”, c’est à dire sur-mesure, qui s’éloigne progressivement des thèmes “prêt à porter” que chacun utilise. Des thèmes qui jusqu’à un certain point nous satisfont à court terme mais qui rapidement se trouvent dépassés par de nouveaux besoins graphiques, fonctionnelles et éditoriaux liées à l’évolution du site.
La manucure consiste en une action assez simple : enlever du code et de la logique écrite en php
du fichier page.tpl.php
pour le transvaser vers un fichier de scripting pur et dur template.php
. On va pour cela augmenter ou amender le code du fichier à l’aide d’une preprocess function
.
Augmenter la logique de votre fichier template.php
Preprocess functions only apply to theming hooks implemented as templates. The main role of the preprocessor is to setup variables to be placed within the template (.tpl.php) files. Plain theme functions do not interact with preprocessors.
La fonction… phptemplate_preprocess_page
phptemplate_preprocess_page
On garde ce hook
générique, c’est à dire disponible pour l’ensemble des thèmes Drupal 6 que l’on pourrait utiliser sur notre site ce qui suppose que l’intitulé de votre fonction commence de la sorte phptemplate_preprocess_
.
Si vous souhaitez rendre ce hook
disponible uniquement pour un thème, il vous suffit d’indiquer le nom du thème. Dans un article précédent on avait créer un thème nommé singapore
, on aurait donc la fonction singapore_preprocess_
Si vous partez d’un fichier vierge template.php
, il vous faut ouvrir une balise <?php
mais on ne la ferme pas…Dans notre exemple on part du fichier template.php
du thème garland
Un seul maître à bord, Capitaine hook
Arrêtons-nous sur cette fonction phptemplate_preprocess_HOOK
afin d’en comprendre les principes :
- Le moteur de template est
phptemplate
- Si vous remplacez
phptemplate_
par le nom de votre thème ou template par exemplemonthemedrupal_
alors lepreprocess
ne sera disponible que dans ce thème ou template. - La partie de cette fonction
_HOOK
doit être remplacée par_page
si vous souhaitez que cette fonction s’applique dans le fichierpage.tpl.php
et par_node
si vous souhaitez que cette fonction s’applique dansnode.tpl.php
. Dans notre exemple, nous choisirons_page
pour que cela s’applique danspage.tpl.php
Un cas pratique
Pour faciliter la compréhension, on va extraire de la logique du thème ou template garland
et appliquer la méthode décrite ci-dessus.
Un extrait du fichier template.php
avec notre nouvelle variable site_baseline
dans mon thème garland
/** * Override or insert PHPTemplate variables into the templates. */ function phptemplate_preprocess_page(&$vars) { $vars['tabs2'] = menu_secondary_local_tasks(); // Hook into color.module if (module_exists('color')) { _color_page_alter($vars); } $output = "<h1>hecube.net avec Drupal</h1>"; $vars['site_baseline'] = $output; } |
Un extrait du fichier page.tpl.php
avec notre nouvelle variable $site_baseline
dans le thème garland
/** * L'impression de cette variable */ print (''.$site_baseline.''); |
L’impression de la variable $site_baseline
dans le theme/template garland
En savoir plus
- Setting up variables for use in a template (preprocess functions)
http://drupal.org/node/223430 - Group 42 – Drupal 6 Template Variables – Going to the Source
http://www.group42.ca/drupal_6_template_variables_going_to_the_source