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来启动你的自定义

 

posted @ 2014-03-21 23:48  yumuxu  阅读(213)  评论(0编辑  收藏  举报