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 !
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.