Les templates dans Contao

ilune_fr > Contao - Typolight > Découverte de Contao > Les templates dans Contao

Les template dans Contao

Présentation des template

Quoi qu'est ce que c'est ? Surpris
Un template, correspond à la partie vue du modèle MVC. Ils représentent le code HTML qui sera inséré dans votre page.

Dans Contao, on trouve des template pour le backend, le frontend, les modules...

Les différents types de Template

Les templates, sont stockés dans les modules, dans les fichiers avec l'extention « .tpl ». Le module frontend, fournit un jeu de template de base, mais vous pouvez créer vos propres template via la création de vos propres modules, ou dans certains cas, en les renseignant dans le repertoire racine de contao « template ».

Il y a plusieurs type de template :

Les templates de page, de module, et les template de contenu.

  • Les template de pages (front end) commencent pas « fe_ », et peuvent être personalisés en rajoutant votre version dans le dossier « /templates »

  • Les template de module commencent par « mod_ » et ne peuvent être personnalisés autrement que en créant votre propre module (héritant d'un autre module éventuellement) et en lui affectant votre propre template.

  • Les template de contenu ont leur propres préfixes « nav_ » par exemple pour la navigation, et peuvent souvent être modifié via l'interface de backend.

Un petit détour obligatoire par $arrData pour comprendre...

Si vous vous promenez un peu dans les classes de Contao, vous remarquerez que de nombreuses ont l'attribut $arrData. Il s'agit d'un tableau utilisé par le système pour créer des classes au nombre d'attributs dynamique (infini) et cela grace aux méthodes magiques de PHP, __get() et __set(), deux méthodes publiques qui gèrent les "404" des classes.

Ainsi, lorsqu'on appelle un attribut non déclaré dans une classe, cet attribut est demandé à __get() (ou __set() si il s'agit d'une affectation), qui en l'occurence va nous retourner, dans le tableau $arrData son équivalent. Voici le code de ces deux méthdoes présentes dans nos classes Contao:

public function __get($strKey)
{
	return $this->arrData[$strKey];
}
public function __set($strKey, $varValue)
{
	$this->arrData[$strKey] = $varValue;
}

ainsi, vous comprendrez aisément (je l'espère), que par exemple $this->Template->fields sera en fait un appel à $this->Template->arrData['fields'] ! Sourire Par contre, étant donné que $arrData est protected, vous ne pourrez pas y accéder en dehors de la classe ou de ses descendants !

Petit détour pour revenir aux Variables utilisés dans les templates

Un template est donc un bête fichier html/php qui est inclut dans le flot html, et executé par PHP (enfin en théorie, on ne doit qu'afficher des valeurs, valeurs précédemment récupérées).

Et la question à 1000€, comment on retrouve les valeurs qu'il doit afficher ? Surpris

Et bien si on regarde attentivement, on sait que que lorsque l'on crée

  • un module pour le backend
  • Un module pour le frontend
  • Un élément (content)

On fait toujours hériter nos classes de

  • Pour le backend de ModuleBackend
  • Pour le frontend de Module
  • Pour content de ContentElement

qui finissent eux même par hériter de la classe Controller, qui hérite elle même de la classe System qui possède dans ses attributs, un attribut $template qui est un objet de type Template ! Surpris

Ainsi donc, notre fichier template est "lu" dans la fonction parse() de la classe Template (de façon toute "bête"):

public function parse()
{
	ob_start(); //op_start() est une fonction qui empèche les divers print, echo et affichage HTML d'être envoyé vers le navigateur
	include($this->getTemplate($this->strTemplate));
	$strBuffer = ob_get_contents();// ob_get_contents() récupère toutes les données non envoyés au navigateur
	ob_end_clean();// ob_end_clean() vide le "buffer"
	return $strBuffer;
}

Donc quand votre fichier template est inclu, il est inclu dans la fonction parse() de Template, vous avez donc accès aux valeurs des attributs de ladite classe !

Vous y accéderez donc par un "bête" $this->mon_attribut;

Donc pour récapituler

De la classe qui sera appelée lors de l'execution de votre module/content, pour "enregistrer" une valeur, vous devez appeler l'attribut Template ainsi:

$this->Template->ma_donnee = "ma valeur";

Dans votre fichier template, vous afficherez cette valeur, par un echo tout simple:

<p><?php echo 'c'est ma valeur : '.$this->ma_donnee; ?></p>


  Cet article est sous licence LGPL, vous pouvez le modifier, le copier et le publier, mais en signalant son auteur d'origine. ( http://www.ilune.fr )