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.