Classe pour les templates toute simple

Soyez le premier à donner votre avis sur cette source.

Vue 5 577 fois - Téléchargée 451 fois

Description

Bon encore une classe pour gérer des templates.
Elle marche vraiment bien et je l'utilise dans tous mes portails maintenant.

Source / Exemple :


// template.inc

<?php

/*
         ############################################################
         # Auteur:             LEMOINE Christophe                   #
         # Date:               16 juillet 2004                      #
         # Version:            1.0                                  #
         # Description:        Moteur de template                   #
         ############################################################

  • /
class Template { // Chemin du dossier où se trouve les fichiers du template var $root = "."; // spécifie si le mode de debuggage est actif var $debug = true; // spécifie si le script PHP arrete le chargement a chaque erreur var $stop = true; // mémorise le dernier message d'erreur var $lasterror = ""; // mémorise les variables à parser ainsi que leur valeurs var $variables = array(); // définit les groupes de variables à mémoriser var $group = array(); // mémorise les fichiers appartenant à chaque bloc var $files = array(); // sorties générales du contenu var $output = ""; // initialise le moteur de template function Template($root = ".") { $d = @dir($root); if ($d) { $d->close(); unset($d); if (substr($root, strlen($root) - 1, 1) != "/") { $root .= "/"; } $this->root = $root; $this->output = ""; } else { $this->halt("Le dossier racine est incorrect !"); } } // définit un nouveau bloc function set_block($name, $fil) { if (!isset($name)) { $this->halt("Nom de bloc incorrect !"); } else { if (!file_exists($this->root.$fil)) { $this->halt("Le fichier template n'éxiste pas !"); } else { $this->group[$name] = ""; $this->files[$name] = $this->root.$fil; $fp = @fopen($this->root.$fil, "r"); if (!$fp) { $this->halt("Paramêtres du template non conforme !"); } else { $bytes = @filesize($this->root.$fil); $this->output .= @fread($fp, $bytes); @fclose($fp); } } } } // définit une nouvelle variable en rapport avec un bloc function set_var($block, $name, $value) { if (!isset($this->group[$block])) { $this->halt("Le bloc n'éxiste pas !"); } else { if (!isset($name) || !isset($value)) { $this->halt("Paramêtres incorrects !"); } else { $this->variables[$name] = $value; $this->group[$block] .= $name."/"; } } } // parse et renvoit le contenu d'un bloc function parse($block) { if (!isset($this->group[$block]) || !isset($this->files[$block])) { $this->halt("Le bloc à parser n'est pas correctement définit !"); } else { if (!file_exists($this->files[$block])) { $this->halt("Le fichier template n'éxiste pas !"); } else { $f = $this->files[$block]; $v = $this->group[$block]; $content = $this->output; $vs = explode("/", $v); for ($i = 0; $i < count($vs) - 1; $i++) { if (isset($vs[$i])) { if (isset($this->variables[$vs[$i]])) { $content = eregi_replace("\{".$vs[$i]."\}", $this->variables[$vs[$i]], $content); } } } $this->output = $content; } } } // affiche la sortie du contenu function get_output() { print($this->output); } // informe qu'il y a eu une erreur function halt($msg) { $this->lasterror = $msg; if ($this->debug == true) { $this->get_lasterror(); } if ($this->stop == true) { die("<font face=\"Arial\" size=\"2\" color=\"black\"><b>Chargement arrêté !</b></font><br>"); } } // récupère le dernier message d'erreur function get_lasterror() { print("<font face=\"Arial\" size=\"2\" color=\"red\"><b>Template:</b> ".$this->lasterror."</font><br>"); } } ?> // index.php <?php include("template.inc"); $t = new Template("./"); $t->set_block("header", "t_header.html"); $t->set_var("header", "TITRE", "le titre du site"); $t->set_var("header", "DESCRIPTION", "et la description"); $t->parse("header"); for ($i = 0; $i < 100; $i++) { $t->set_block("repeat", "t_repeat.html"); $t->set_var("repeat", "KEY", "clef"); $t->set_var("repeat", "VALUE", (string) $i); $t->parse("repeat"); } $t->set_block("footer", "t_footer.html"); $t->set_var("footer", "INFORMATIONS", "les informations du footer"); $t->parse("footer"); $t->get_output(); ?>

Conclusion :


tout est dans le zip joint.
ce n'est vraiment pas dur a faire et a utiliser mais ca rend pas mal de services !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

boosterjack
Messages postés
11
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
31 août 2009
-
Elle fonctionne super bien mais juste un détail comment tu passes des parametres dynamiques au template ex: t'as un tableau et tu veux le recuperer dans ton template pour le traiter (ex: $t->set_var("body", "TABLEAU", $tab); dans le template je fais quoi {TABLEAU}, echo $TABLEAU ??? Si quelqu'un peut m'aider ??
lumesh
Messages postés
564
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
7 novembre 2008
-
Mais, sit moi, chez OVH, il tourne sous koi le serv ?
j'ai un hbergeur PRO sous Linux, et aucun PB, je suis sous EasyPHP sous win2000 pour dev et ca passe. Ca m'etonne, peux tu me donner plus d'info sur l'hbergement OVH STP ?
cs_Zacland
Messages postés
36
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2007
-
Y'a pas de mal, tant que tout le monde est au courant ^^

Sinon, il y a autre chose à savoir:

En fonction du système d'exploitation sur lequel c'est installé, la ligne:

$content = eregi_replace("{".$vs[$i]."}", $this->variables[$vs[$i]], $content);

retourne une erreur du style: REG_BADRPT error

En fait, les caractères { et } ne sont des caractères spéciaux !!!

pour que cela passe, il faut mettre le signe \ devant:

$content = eregi_replace("\{".$vs[$i]."\}", $this->variables[$vs[$i]], $content);


Sur EasyPHP, vous n'avez pas l'erreur, mais chez OVH (mon hébergeur) ça ne loupe pas, vous avez l'erreur...

Ziboux :p

-=Zac
lumesh
Messages postés
564
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
7 novembre 2008
-
ouui je l'avais corrigé chez moi
mais oublié de le faire ici
dsl
cs_Zacland
Messages postés
36
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2007
-
Une toute pitite erreur:

Dans la fonction set_block

les lignes suivantes:

if (!file_exists($fil))
{
$this->halt("Le fichier template n'éxiste pas !");
}

ne fonctionne pas dans le cas où l'on a rentré un path pour les templates

Correction:

if (!file_exists($this->root.$fil))
{
$this->halt("Le fichier template n'éxiste pas !");
}

Zinon, za marche très très bien ^^

-=Zac

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.