Classe pour les templates toute simple

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

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.