Classe Templates

Introduction



La classe Templates permet d'effectuer la séparation entre le code HTML et le PHP (explication détaillée du principe).

Pourquoi utiliser des templates ?



L'utilisation de fichiers templates n'est en rien obligatoire pour développer un CMS. Pourtant nous avons fait le choix d'utiliser ce principe de fonctionnement pour des raisons assez simples: PHPBoost se veut un portail entièrement personnalisable sur le plan graphique.
On aurait pû utiliser une feuille de style CSS par thème et les designs auraient pu être modifiés. Bien que ce soit le CSS qui gère la mise en forme, nous avons tout de même voulu laisser l'utilisateur pouvoir modifier la source HTML de ses pages afin notamment de déplacer les variables, ce qui n'aurait pas été possible avec du CSS. Nous avons fait le choix d'utiliser des templates, ce qui consiste à séparer complètement le PHP et le HTML. Quand on développe de façon traditionnelle le PHP permet de travailler sur le contenu des variables, mais le code HTML se trouve complètement mélangé au PHP, ce qui rend plus complexe la lecture du code. L'utilisation des templates a l'avantage de pouvoir laisser l'utilisateur modifier le code HTML de chacun de ses thèmes séparément, mais il permet en plus de clarifier le code PHP qui ne contient plus de HTML.
Rien de mieux qu'un schéma pour comprendre comment se passe la séparation des deux parties du code.


Templates signifie en français patron, à prendre dans le sens géométrique du terme. Cela correspond bien à ce qui est décrit, à savoir un dispositif de balisage pour placer les variables.

Principe de fonctionnement



Fonctionnement du moteur de templates



Les fichiers au format .tpl sont en réalité des fichiers HTML avec des marqueurs permettant d'indiquer des actions à accomplir par le parseur de templates. Une fois analysé par le parseur ces marqueurs sont remplacés par des instructions en PHP, c'est ce qu'on appelle la compilation des templates.

Le template compilé est stocké dans le dossier /cache/tpl sous la forme tpl_$theme_$nomdutemplate.php si le template se situe dans le dossier /templates, ou $nomdumodule_tpl_$nomdutemplate.php s'il appartient au dossier /template d'un module.

Lors de la parse finale du template (voir la méthode Pparse()) le fichier est inclus (avec la fonction include de PHP). Les variables ayant été définies avant par les fonctions Assign_vars() et Assign_block_vars().

Fonctions disponibles dans un fichier de template



Variables simple



Les variables simples sont simplement remplacés par leur valeur à leur emplacement dans le template. Pour définir une variable simple il faut respecter la syntaxe suivante.
Code TPL :
{NOMDELAVARIABLE}

Leur assignation se fait avec la méthode Assign_vars().

Les boucles



Les boucles permettent de répéter une partie de code dans le template. Pour définir une boucle il faut respecter la syntaxe suivante.
Code TPL :
# START boucle # <br />
Code répété dans la boucle<br />
# END boucle #


Les boucles peuvent être imbriquées. Pour définir une boucle imbriquée il faut respecter la syntaxe suivante.
Code TPL :
# START boucle1 # <br />
Code répété dans la boucle 1<br />
	# START boucle1.boucle2 # <br />
	Code répété dans la boucle 2<br />
	# END boucle1.boucle2 #<br />
# END boucle1 #

Leur assignation se fait avec la méthode Assign_block_vars().

Les variables dans les boucles



Les variables dans les boucles doivent être préfixées par la liste des boucles dans lesquelles elles se trouvent, séparées par des points.
Code TPL :
# START boucle1 # <br />
Code répété dans la boucle 1 {boucle1.VARBOUCLE_1}<br />
	# START boucle1.boucle2 # <br />
	Code répété dans la boucle 2 {boucle1.boucle2.VARBOUCLE_2}<br />
	# END boucle1.boucle2 #<br />
# END boucle1 #


Les conditions



Bien que les conditions puissent être gérées par des boucles, il existe également la possibilité de définir des conditions dans les templates.
Code TPL :
# IF C_NOMDEVAR # <br />
<!-- Code exécuté seulement si C_NOMDEVAR vaut true --><br />
# ENDIF #


Les includes



Il est possible d'inclure d'autres templates dans un template par l'ajout d'un marqueur. Le nom du template à fournir, est le nom du fichier .tpl sans l'extension. Pour un template qui s'appelle nomdutemplate.tpl le code à insérer est le suivant:
Code TPL :
# INCLUDE  nomdutemplate #


Utilisation dans un module



La classe templates est déjà instanciée dans l'environnement de PHPBoost. L'objet associé est la variable $Template.
Vous n'avez donc pas à l'instancier en principe.

Méthodes