Brève classe template

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 215 fois - Téléchargée 28 fois

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

Ajouter un commentaire Commentaires
Messages postés
4
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
9 avril 2005

Ok.
En plus je viens de merendre compte que les templates peuvent gérer bien plus de chose que ça:
http://www.bertrand-soulier.com/php/tutoriaux/template1.php

Bon du coup je peux l'annoncer officiellement: mon script ne sert à rien :-D

Bah au moins j'aurais appris des trucs :-)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Bah dans ce cas autant ne pas utiliser de template du tout...

Par contre l'include est plus performant (et de loin) que le parsing avec expression régulière ;-)

a+
Messages postés
4
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
9 avril 2005

Ah oui, c'est vrai j'ai oublié les "var" pour déclarer les variables de la classe.
C'est parce que j'avais commencé ça en php5, et je les avais déclarée en public, puis finalement ça servait à rien...

Donc, en espérant que je peux poster toute la source ici:

<?

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;

}
}

?>

C'est vrai que la methode en utilisant include doit être plus performante, c'est plus direct....

Seulement entre la recherche d'une expression régulière dans un fichier tpl, et le traitement d'un fichier php inclus en fin de page, je ne sais pas quel est le plus performant....

Par contre le traitement des boucles, c'est un truc qui peut déjà se faire côté php avant de charger les variables:

ex: for ($i=0;$i<10;$i++)
{
$template->send_vars['TRUC'].="Machin truc

";
}

Remarque c'est une bonne idée mais ça signifierait inventer un système de boucle dans la template? Finalement une boucle php serait plus simple et plus rapide....
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,

perso je préfère le bon vieux système de l'include situé en fin de page avec des variables à remplacer, qui reste plus performant.

Ton système serait pas mal si tu implémentais une gestion des boucles dans ta template.

a +
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

pour declarer un membre a ta classe, normalement, on ecrit :
var $send_vars;

Je ne l'ai pas testee...tu es sur qu'elle marche en l'etat ?

Sinon, rien a redire :-)
Afficher les 6 commentaires

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.