Accueil > > > [PHP5]CLASSE DE TEMPLATE PHP AVEC CACHE
[PHP5]CLASSE DE TEMPLATE PHP AVEC CACHE
Information sur la source
Description
Bonjour, je soumets à votre critique un moteur de template en PHP : - aucune nouvelle synthaxe à apprendre ; - aucun traitement supplémentaire ; - gain de ressource ; - séparation de la logique et de la présentation ; - toute la flexibilité et la puissance de PHP peut etre utilisé ; - ajout d'une simple variable ; - ajout de plusieurs variables simultanément ; - ajout de résultat d'une requête SQL ; - boucle imbriqué illimité ; - imbrication de template illimité ; - gestion d'un système de cache pour optimiser l'affichage ; Mais voilà, j'aimerai avoir votre avis afin de savoir s'il est réellement optimisé ou si on peut encore l'améliorer ;)
Source
<?php
class Template
{
private $path = null;
private $vars = array();
public function __construct($path = null)
{
if (isset($path))
{
$this->setPath($path);
}
}
public function setPath($path)
{
$path = trim($path, '/\\');
$path .= DIR_SEP;
if (!is_dir($path))
{
throw new Exception ('Chemin du dossier template incorrect : `' . $path . '`');
}
$this->path = $path;
}
function setVar($name, $value)
{
$this->vars[$name] = $value;
}
function setVars($vars, $clear = false)
{
if($clear === true)
{
$this->vars = $vars;
}
else
{
if(is_array($vars))
{
$this->vars = array_merge($this->vars, $vars);
}
}
}
function fetch($file)
{
extract($this->vars);
ob_start();
include($this->path . $file);
$contents = ob_get_contents();
ob_end_clean();
return $contents;
}
}
?>
<?php
class Cache
{
private $path = null;
public function __construct($path = null)
{
if (isset($path))
{
$this->setPath($path);
}
}
public function setPath($path)
{
$path = trim($path, '/\\');
$path .= DIR_SEP;
if (!is_dir($path))
{
throw new Exception ('Chemin du dossier cache incorrect : `' . $path . '`');
}
$this->path = $path;
}
public function setCache($file, $contents)
{
$filename = $this->path . md5($file);
$contents = serialize($contents);
if (!file_put_contents($filename, $contents))
{
throw new Exception('Impossible de mettre en cache : `' . $file . '`');
}
}
public function getCache($file)
{
$filename = $this->path . md5($file);
if (file_exists($filename))
{
$contents = file_get_contents($filename);
$contents = unserialize($contents);
return $contents;
}
else
{
return false;
}
}
public function destroy($file)
{
$filename = $this->path . md5($file);
@unlink($filename);
}
}
?>
Conclusion
l'exemple :
Code : PHP
// inclusion de la classe template require('includes/template.php');
// inclusion de la classe Cache require('includes/cache.php');
// nouvelle instance de la classe Template $tpl = new Template('templates');
// nouvelle instance de la classe Cache $cache = new Cache ('cache');
// on assigne une simple variable 'bonjour' $tpl->setVar('bonjour', 'Bonjour tout le monde !');
// on assigne plusieurs variable simultanément 'hello' et 'salut' $bonjour = array('hello' => 'hello tout le monde !', 'salut' => 'salut tous le monde !'); $tpl->setVars($bonjour);
// supposons que l'array $user_list provienne d'une base de donnée... // pour eviter d'utiliser des ressources inutilement, on va mettre // en cache le résultat de la requête
// les résutats sont-ils en cache ? si oui on les // récupère à partir du fichier et non de la requête if (!$user_list = $cache->getCache('user_list')) { // mysql_connect, ETC... $user_list = array( 1 => array( 'id' => 1, 'nom' => 'jean'), 2 => array( 'id' => 2, 'nom' => 'vincent'), 3 => array( 'id' => 3, 'nom' => 'maxime') ); // on met en cache le résultat $cache->setCache('user_list', $user_list); }
// on l'assigne comme variable 'user_list'... $tpl->setVar('user_list', $user_list);
// on compile le template user_list $user_list_render = $tpl->fetch('user_list.php');
// et on l'assigne comme variable user_list_render... $tpl->setVar('user_list_render ', $user_list_render);
// on affiche la page entière echo $tpl->fetch('exemple.php');
l'exemple (exemple.php) :
Code : PHP
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transition al.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Exemple de la classe template</title> </head>
<body> <?php echo $bonjour; ?> <br /> <?php echo $hello; ?> <br /> <?php echo $salut ?> <br /> <?php echo $user_list_render; ?> </body> </html>
l'exemple (user_list.php) :
Code : PHP
<table> <tr> <th>Id</th> <th>Nom</th> </tr> <?php foreach($user_list as $user): ?> <tr> <td><?php echo $user['id'];?></td> <td><?php echo $user['nom'];?></td> </tr> <?php endforeach; ?> </table>
On aurait pu aussi mettre en cache la page entière, mais vous avez compris le fonctionnement... L'intérêt d'un tel système de cache et de permettre de générer par exemple un fichier XML à partir des résultats mis en cache par exemple.
!!! ATTENTION !!!
Le cache n'a pas de durée de vie, pour le mettre à jour :
Lors d'une requête d'ajout (vos pages de post/edition de messages, de news, etc.) inclure :
$cache->destroy('nom_du_fichier_ou_vous_avez_mi s_le_cache);
Historique
- 22 juin 2007 22:17:38 :
- - Séparation de la classe de template et cache pour une meilleur gestion des données (la classe cache permet de mettre en cache tout type de donnée et pas seulement un fichier template, comme par exemple uniquement les résultats d'une requête SQL pour un traitement différent (fil RSS) ;
- Ajout d'une méthode setter ;
- Remplacement des shorts tags par les tags <?php et ?> ;
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
cache du navigateur [ par booth ]
c'est encore moa....Désolé mais j'ai un projet à terminer dans peu de temps alors...J'ai pas trouvé le moyen de forcer le navigateur (et le proxy pend
probleme de classe en php [ par Elkaire ]
Donc voila mon probleme!!dans une premiere page je rensegne les insances de mon objet. Une fois renseigné je peux réutiliser les instances cet objet d
Vider le cache de l'explorer en programmation Php ou JS [ par Cr0w ]
Bonjour,J'aimerai savoir si il existe une fonction en Php ou JavaScript permettant de vider le cache de l'explorer.En effet, j'ai conçu dans le cadre
Pb avec classe en php, Affichage [ par matou82 ]
Je voudrais savoir comment surcharger l'affichage d' echo ou print pour une classePour avoir:$obj = new Maclass;echo $obj;Cela affiche : "Object" Je s
cache limiter [ par brok ]
quand j'appelle ma page page.php, je recoit le message d'erreur suivant:Warning: Cannot send session cache limiter - headers already sent (output star
php, classe COM et excel [ par Faboun ]
bonjour,Voici mon problème j'vais développé un script qui a partir dune bd mysql me permettait de générer un fichier xls, puis de l enregistrer sur mo
classe PHP pour accés BDD [ par cuicui ]
Bonjour,Je recherche des classes en PHP qui perùet d'acceder à des des bases de données tel que INTERBASE ou MySQL.Merci à touscuicui...
classes et sessions [ par davwart ]
Hello all,là je desespere..voial j'ai deux fichiers.fichier1: classe.inc.php<?phpclass User{}?>fichier2: index.php<?phpinclude("classe.inc.ph
AIDE - Classe en php 5 [ par el_pecheur ]
J'ai besoin d'un gros coup de main ... J'ai trouver un logiciel http://uml2php5.zpmag.com/windows.php qui permet de donner le code d'une classe en ph
PHP - classe [ par missceline33 ]
Bonjour à tous, j'ai un problème avec mes classes PHP. Je voudrais définir plusieurs constructeurs à ma classe mais quand je rajou
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
HTML VERS PDFHTML VERS PDF par spike911
Cliquez pour lire la suite par spike911
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|