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
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|