在调用display()或者
fetch()的时候,
ä½ å�¯ä»¥è®¾ç½®å�•个页é�¢æœ‰å¤šä¸ªç¼“å˜ã€‚
当我们希望执行display('index.tpl')的时候,
å�¯ä»¥æ ¹æ�®ä¸�å�Œçš„æƒ…况æ�¥ç”Ÿæˆ�ä¸�å�Œçš„缓å˜ï¼Œå¹¶ä¸”å�¯ä»¥å�•独区分,
那么就需�设置$cache_id为第二个�数�实现了。
Example 15.6. display()的�数作为$cache_id
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
$my_cache_id = $_GET['article_id'];
$smarty->display('index.tpl', $my_cache_id);
?>
上é�¢ï¼Œæˆ‘们将$my_cache_id值作为$cache_idå�‚æ•°ä¼ é€’ç»™
display()。
�个�独的$my_cache_id值,对应将会有�独的
index.tpl模æ�¿çš„ç¼“å˜æ–‡ä»¶ç”Ÿæˆ�。
在这个例å�里é�¢ï¼Œ$cache_id是我们从URLä¸èŽ·å¾—çš„article_id。
技术说明
当客户端(æµ�è§ˆå™¨ï¼‰ä¼ é€’å€¼åˆ°Smarty或任何的PHP程åº�时,务必谨慎。
虽然上é�¢ä¾‹å�通过URLä¼ é€’article_id显得比较方便,但å�¯èƒ½ä¼šå¼•起问题。
$cache_id值会用�建立文件目录的,
所以如果用户故æ„�ä¼ é€’äº†é�žå¸¸å¤§çš„值给article_id,或写个快速循环的脚本æ�¥å�‘é€�éš�机的article_id,
那么这很有�能引起一些�务器端的问题。
�记�,使用任何数���先检查。
在上é�¢çš„例å�ä¸ï¼Œæˆ–许article_id有10个å—符的长度,
ä»…å�¯ä»¥æ˜¯å—æ¯�数组的组å�ˆï¼Œè€Œä¸”还应该是å˜åœ¨äºŽæ•°æ�®åº“å†…ï¼Œé‚£ä¹ˆï¼Œä½ å°±åº”è¯¥æ£€æŸ¥å®ƒï¼�
确�用�一个$cache_id作为
isCached() 和
clearCache()的第二个�数。
Example 15.7. 给 isCached() ä¼ é€’ä¸€ä¸ª cache_id
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
$my_cache_id = $_GET['article_id'];
if(!$smarty->isCached('index.tpl',$my_cache_id)) {
// 没有缓å˜ï¼Œè¿™é‡Œå°†è¿›è¡Œä¸€äº›èµ‹å€¼æ“�作
$contents = get_database_contents();
$smarty->assign($contents);
}
$smarty->display('index.tpl',$my_cache_id);
?>
è¦�åˆ é™¤ç‰¹å®š$cache_id的全部缓å˜ï¼Œ
�时需�给clearCache()
ä¼ é€’null作为第一个å�‚数。
Example 15.8.Â åˆ é™¤ç‰¹å®š$cache_id的缓å˜
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
// åˆ é™¤$cache_id为"sports"的全部缓å˜
$smarty->clearCache(null,'sports');
$smarty->display('index.tpl','sports');
?>
按这ç§�æ–¹å¼�ï¼Œä½ å�¯ä»¥é€šè¿‡è®¾ç½®å�Œä¸€ä¸ª$cache_idæ�¥æŠŠä½ 的缓å˜â€œç»„织â€�èµ·æ�¥ã€‚
