Get Smarty

Donate

Paypal

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

Caches multiples pour une seule page

Vous pouvez avoir plusieurs fichiers de caches pour un même appel aux fonctions display() ou fetch(). Imaginons qu'un appel a display('index.tpl') puisse avoir plusieurs résultats, en fonction de certaines conditions, et que vous vouliez des fichiers de cache séparés pour chacun d'eux. Vous pouvez faire celà en passant un identifiant de cache ($cache_id) en deuxiéme paramètre à l'appel de fonction.

Example 14.6. Passage d'un $cache_id à display()


<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

$my_cache_id = $_GET['article_id'];

$smarty->display('index.tpl',$my_cache_id);
?>

  

Nous passons ci-dessus la variable $my_cache_id à display() comme identifiant de cache. Pour chaque valeur distincte de $my_cache_id, un fichier de cache distinct va être créé. Dans cet exemple, article_id a été passé dans l'URL et est utilisé en tant qu'identifiant de cache.

Note technique

Soyez prudent en passant des valeurs depuis un client (navigateur Web) vers Smarty (ou vers n'importe quelle application PHP). Bien que l'exemple ci-dessus consistant à utiliser article_id depuis l'URL puisse paraetre commode, le résultat peut s'avérer mauvais. L'identifiant de cache est utilisé pour créer un répertoire sur le système de fichiers, donc si l'utilisateur décide de donner une trés grande valeur à article_id ou d'écrire un script qui envoie des article_id de façon aléatoire, celà pourra causer des problémes coté serveur. Assurez-vous de bien tester toute donnée passée en paramètre avant de l'utiliser. Dans cet exemple, peut-être savez-vous que article_id a une longueur de 10 caractéres, est exclusivement composé de caractéres alph-numériques et doit avoir une valeur contenue dans la base de données. Vérifiez-le bien !

Assurez-vous de bien passer le même identifiant aux fonctions is_cached() et clear_cache().

Example 14.7. Passer un cache_id a is_cached()


<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

$my_cache_id = $_GET['article_id'];

if(!$smarty->is_cached('index.tpl',$my_cache_id)) {
  // pas de fichier de cache dispo, on assigne donc les variables
  $contents = get_database_contents();
  $smarty->assign($contents);
}

$smarty->display('index.tpl',$my_cache_id);
?>

  

Vous pouvez effacer tous les fichiers de cache pour un identifiant de cache particulier en passant NULL en tant que premier paramètre à clear_cache().

Example 14.8. Effacement de tous les fichiers de cache pour un identifiant de cache particulier


<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

// efface tous les fichiers de cache avec "sports" comme identifiant
$smarty->clear_cache(null,'sports');

$smarty->display('index.tpl','sports');
?>

  

De cette manière, vous pouvez "grouper" vos fichiers de cache en leur donnant le même identifiant.

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors