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.

Leveraging Drupal: Getting Your Site Done Right

Leveraging Drupal: Getting Your Site Done Right

Un excellent livre sur le CMS Drupal, qui prend vraiment le partie d'une approche pragmatique et efficace. Rien n'est laissé de côté sur la compréhension de Drupal (thème, module...etc) mais il n'y a rien de superflu non plus. Par ailleurs, une chose rare qui mérite d'être signalée c'est une application concrète de la méthode Agile avec "User storie", "Acceptance Test" pour mener à bien le développement d'un site sous Drupal. Un livre très complet.

Genre(s) : , , , , , , , , , , , , , , , , , ,
Auteur(s) :
Edition(s) :

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 :

  1. Le moteur de template est phptemplate
  2. Si vous remplacez phptemplate_ par le nom de votre thème ou template par exemple monthemedrupal_ alors le preprocess ne sera disponible que dans ce thème ou template.
  3. La partie de cette fonction_HOOK doit être remplacée par _page si vous souhaitez que cette fonction s’applique dans le fichier page.tpl.php et par _node si vous souhaitez que cette fonction s’applique dans node.tpl.php. Dans notre exemple, nous choisirons _page pour que cela s’applique dans page.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;
	}

Drupal, Personnaliser, Variables - Créer des variables sur mesure dans Drupal 6

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.'');

Drupal, Personnaliser, Variables - Créer des variables sur mesure dans Drupal 6

L’impression de la variable $site_baseline dans le theme/template garland
Drupal, Personnaliser, Variables - Créer des variables sur mesure dans Drupal 6

Drupal, Personnaliser, Variables - Créer des variables sur mesure dans Drupal 6

En savoir plus