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 cela en passant un identifiant de cache (cache_id) en
deuxiéme paramétre a l'appel de fonction.
Passage d'un cache_id a display()
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 a 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 a 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 a article_id
ou d'écrire un script qui envoie des article_id de faton aléatoire,
cela 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().
passer un cache_id a is_cached()
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
a clear_cache().
effacement de tous les fichiers de cache pour un identifiant de cache particulier
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.