Brève classe template

Contenu du snippet

Si vous ne savez pas ce qu'est un template, je vous renvoie comme un malappris sur
google avec le mot clé "template php" car je pense que d'autres l'ont expliqué bien
mieux que je ne saurais le faire :-)
Des personnes l'ont aussi expliqué sur ce site, il suffit de taper "classe template" dans
le moteur de recherche.

Ce code ne sert pas à grand chose finalement, dans la mesure où on peut trouver plein de classes template disponibles ici et ailleurs.
Je voulais juste écrire la classe la plus brêve que je puisse faire pour utiliser un template, ne serait-ce que pour me convaincre que ce n'est pas si compliqué le système des templates :-) Mais ça ne signifie pas que son fonctionnement est plus rapide que pour d'autres classes template....
A défaut d'un code plus ou moins agréable à lire, j'ai commenté chaque étape.

Pour l'utiliser:

Avoir à disposition un fichier template nommé...on va dire qu'on le nomme template1.tpl
Et on va dire qu'on le met dans le même dossier que le fichier qui contient cette classe.
Dans le fichier template1.tpl, on a des variables dont le nom est contenu entre accolades:
exemple: {Variable1}
Elles peuvent être situées n'importe où dans la source, exemple:
<a href="http://www.phpcs.com/ajoutcode.aspx" target={Variable1}>
Ou encore:
<b>gnagnagna{Variable1}</b>

Le nom des variables est soumis au mêmes conditions que les variables php (pas de caractères autres qu'alphanumériques, sensible à la case etc...).

Passons au fichier php, qui contient notre classe.
A la suite de l'initialisation de la classe Template (le code que j'ai écris ici), créer une variable objet:
$mon_template=new Template;

Ensuite il va falloir remplir le tableau $send_vars de l'objet $template, avec des champs qui auront exactement le même identifiant que les variables du fichier template1.tpl.
Par exemple si j'ai un {Variable1} et un {Variable2} dans template1.tpl, il faudra définir
$mon_template->send_vars['Variable1] et $mon_template->send_vars['Variable2]

C'est très pratique de les définir de cette manière:
$mon_template=array("Variable1 => "Contenu de la Variable1",
Variable2 => "Contenu de la variable2");
Une fois que vous avez définies ces variables, vous pouvez enfin générer le code source final de votre fichier en appelant la methode templatisation() avec comme argument l'adresse de votre fichier template.
Exemple avec notre cas:
$template->templatisation("./template1.tpl");

Mais ça ne suffira pas, il faudra faire un echo sur la valeur de retour de cette methode. Ce n'est donc pas comme ça qu'il faudra l'utiliser mais plutôt:
echo $template->templatisation("./template1.tpl");

Et voilà, le tour est joué.

La gestion des erreurs n'est pas franchement folichonne, si le fichier template est introuvable, il vous le dira. S'il ya des variable template qui n'ont pas été remplacées, elle seront remplacée par une chaine vide (comme s'il n'y avait rien).
En gros si vous vous trompez dans vos noms de variables, cette classe ne vous préviendra pas....

Voilà voilà...
Si vous avez des questions de tout ordre, un bug, un truc que vous ne comprenez pas n'hésitez à me demander :-)

Source / Exemple :


<?

class Template
{
        var $send_vars; // Tableau qui contient les variables à envoyer au template.
        var $page_source; /* Source du tpl. Puis par la suite celà deviendra la source
        finale de la page. */
        var $tpl_vars; /* Variables du fichier template (celles qui sont
        définies entre accolades{} ) */

        function templatisation($tpl_addr)
        {
              // Ouverture du fichier template
              file_exists($tpl_addr) ? $this->page_source=file_get_contents($tpl_addr)
              : die("Ficher Template introuvable");
              //Isolation des variables template
              preg_match_all("`\{([^}]+)\}`",$this->page_source,
              $this->tpl_vars,PREG_PATTERN_ORDER);

              /* Remplacement des variables tpl par leur alias dans le tableau
              $send_vars */
              foreach ($this->tpl_vars[1] as $current_tpl_var)
              {
                     $this->page_source=str_replace("{".$current_tpl_var."}",
                     $this->send_vars[$current_tpl_var],$this->page_source);
              }
              return $this->page_source;
        }
}

Conclusion :


Je me suis très vaguement inspiré de la classe template de phpBB. Ne serait-ce que pour l'extension des fichiers template (*.tpl) et pour la forme des variables template (usage des accolades). M'enfin bon je suppose que la plupart des templates en php fonctionne de cette manière....

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.