Quoi qu'est ce que c'est ?
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 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 ».
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.
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'] ! Par contre, étant donné que $arrData est protected, vous ne pourrez pas y accéder en dehors de la classe ou de ses descendants !
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 ?
Et bien si on regarde attentivement, on sait que que lorsque l'on crée
On fait toujours hériter nos classes de
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 !
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;
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 ) |