PHP Smarty 笔记 1
1.当$compile_check开启的时候(默认开启),每个模板文件和配置文件都会在缓存检查的的时候
执行编译检查,如果这些文件在缓存生成后修改,那么缓存会马上重新生成。这是一个覆盖的选项,所以更好的性能建议把
$compile_check设置成false
$smarty->setCompileCheck(false);
2.如果开启了$force_compile,缓存文件将总是会重新生成,效果和关闭缓存是一样的。而且还会降低性能
$force_compile一般用于调试目地。更却当的方式是把缓存$caching设置成Smarty::CACHING_OFF
3.isCached()函数可以检查模板的缓存是否存在。如果缓存已经存在,你就可以跳过这一步
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); if(!$smarty->isCached('index.tpl')){ //找不到缓存,这里进行一些赋值操作 $contents = get_database_contents(); $smarty->assign($contents); } $smarty->display('index.tpl');
4.{nocache}{/nocache}用于关闭模板区块的缓存,请去任任何一个在不缓存区域内的变量,都可以在缓存时从PHP获取到值
Today's date is
{nocache}
{$smarty.now|date_format}
{/nocache}
5.可以通过clearAllCache()来删除全部缓存,或者用clearCache()来删除特定的缓存组的缓存内容。
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); //仅删除index.tpl的缓存 $smarty->clearCache('index.tpl'); //删除全部的缓存 $smarty->clearAllCache(); $smarty->display('index.tpl');
6.单页多个缓存,在调用display()或者fetch()的时候,可以设置多个缓存。当我们希望执行
display('index.tpl')的时候,可以根据不同的情况来生成不同的缓存,并且可以单独却分,那么
就需要设置$cache_id为第二个参数来实现。
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); $my_cache_id = $_GET['article_id']; $smarty->display('index,tpl',$my_cache_id);
if(!$smarty->isCached('index.tpl',$my_cache_id){ //没有缓存,这里将进行一些赋值操作 $contents = get_database_contents(); $smarty->assign($contents); } $smarty->display('index.tpl',$my_cache_id); //---------------------------------------------------------------------------- $smarty->clearCache(null,'sport'); $smarty->display('index.tpl','sport');
7.缓存组,你可以通过设置$cache_id更精细的组织缓存,在$cache_id值中使用竖线 | 来设置缓存组,同是你可以根据需要设置多个缓存组。
1 $smarty->clearCache(null,'sports|basketball'); 2 $smarty->clearCache('foo.tpl','sports|basketball'); 3 $smarty->display('index.tpl','sport|basketball');
8.控制单个标签不进行缓存,可以为其加入"nocache"的属性
1 {$smarty.now|date_format nocache};
9.变量的缓存控制,通过assign()来控制变量不进行缓存。如果一个变量设置了不缓存,那么它在页面每次加载的时候都会从PHP里重新赋值
$smarty->assign('foo',time(),true);
10.插件的缓存控制,在注册插件时,同时控制插件的缓存registerPlugin()的第三个参数是$cacheable 其默认是TRUE
<?php function remaining_seconds($params,$smarty){ $remain = $params['endtime'] - time(); if($remain >= 0){ return $remain.'second(s)'; }else{ return 'done'; } } $smarty->registerPlugin('function','remaining','remaining_seconds',false,array('endtime')); $smarty->display('index.tpl'); ?> //-----------------------index.tpl内容------------------------------- {remaining endtime=$obj->endtime} //--------------------------------------------------------------------------------------------- function smarty_block_dynamic($param,$content,$smarty){ return $content; } $smarty->registerPlugin('block','dynamic','smarty_block_dynamic',flase); $smarty->display('index.tpl'); //------------------------index.tpl内容-------------------------------------------- {dynamic} sssssssssssssssssssss {/dynamic}
?>
11..自定义缓存实现
Smarty可以通过API Smarty_CacheResource_Custom或者Smarty_CacheResource_KeyValueStore来实现缓来实现。
自定义缓存可以放到$plugins_dir目录下并命名为cacheresource.foobarxyz.php或者在运行时通过registerCacheResource()来进行注册。上面两种方式都必须设置$caching_type来启动你的自定义