1.cache缓存
smarty编译后会在cache文件夹下生成临时文件
使用cache可以跳过读取数据,编译模板,直接显示画面
$smarty->caching
= 0 ;
//不使用缓存(1:使用, 2:使用但是有期限)
= 60
$smarty->cache_lifetime;
//设置期限(1分钟)
$smarty->is_cached('test.tpl')
;
//可获知文件是否被缓存
$smarty->clear_cache('test.tpl') ;
//清除特定文件的缓存
$smarty->clear_all_cache() ;
//清除所有缓存
注:include,diplay,fetch中使用的模板也会使用缓存
2.plugin插件
smarty支持自定义的插件。
插件的类型分为:
function,modifier,block,compiler,prefilter,postfilter,outputfilter,resource,insert
插件有3种定义方法
1)用register_function, register_modifier...注册插件,可以使用任意自定义函数(insert不支持)
2)定义插件文件,需要生成插件文件(insert不支持)
3)insert插件,只需要定义函数,但必须以insert_开头(只有insert)
3.insert插件
1)PHP文件定义函数:
function insert_getSidemenu($params, $smarty)
{
$smarty->assign('title', $params['title']);
return $smarty->fetch('sidemenu.tpl');
//或者直接 return "<div>...</div>"
}
2)模板文件调用:
{insert name="getSidemenu" title="标题"}
注:insert插件与include相似,比include更加灵活,include只能加载模板,insert可以用模板或者HTML代码
4.function插件(此处定义插件文件,也可以使用register)
1)设定插件目录
$smarty->plugins_dir[] = '.../smarty/plugins';
2)在插件目录下生成php文件,注意开头为functon.
function.yourplugin.php
3)在文件里定义函数 smarty_function_yourplugin
前面必须以smarty_function_开头,后面的yourplugin要与文件名中的一致
function smarty_function_yourplugin($params, &$smarty)
{
$width = $params['width'];
$height = $params['height'];
return <<<EOD
<object height="{$height}" width="{$width}">
</object>
EOD;
}
4)调用插件
{yourplugin width=800 height=600}
此处的width,height为函数 smarty_function_yourplugin中使用的变量
5.使用过滤插件filter(此处使用register,也可以生成插件文件prefilter.myPrefilter.php)
smarty有3种过滤插件,过滤器处理编译中的中间代码,比如替换字符串。
前过滤器,后过滤器,输出过滤器,它们分别在PHP编译前,编译后,页面显示前被调用。
如何使用过滤器(下面这个过滤器会去除模板文件中所有注释):
1)定义过滤器使用的函数
{
// 去除注释
return preg_replace('/\{\*.+\*\}/sU', '', $tpl_source);
}
2)注册过滤器:
$smarty->register_prefilter('myPrefilter');
6.modifier插件
与function相似,function需要返回值,modifier没有返回
使用插件文件的话:modifier.yourplugin.php定义函数smarty_modifier_yourplugin
7.block插件(简单实例)
1)插件文件block.repeat.php
function smarty_block_repeat($params, $content, &$smarty, &$repeat)
{
if ($content)
{
$ret = "";
for ($i=0; $i<$params['count']; $i++)
{
$ret .= $content;
}
return $ret;
}
}
2)模板调用
{repeat count=3}
#################<br />
{/repeat}
3)输出为
#################
#################
#################
8.compiler插件(简单实例)
1)插件文件compiler.tplheader.php
function smarty_compiler_tplheader($tag_arg, &$smarty)
{
return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';";
}
2)模板调用
{tplheader}
3)输出为
echo 'index.tpl compiled at 2012-12-12 12:12';
9.resource插件(简单实例
resource.db.php
)
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: resource.db.php
* Type: resource
* Name: db
* Purpose: 从db取出模板
* -------------------------------------------------------------
*/
function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
{
$tpl_source = "This is the template text";
// 成功取得模板,则返回TRUE
return true;
}
function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
{
$tpl_timestamp = time();
// 成功取得时间,则返回TRUE
return true;
}
function smarty_resource_db_secure($tpl_name, &$smarty)
{
// 检查安全性
return true;
}
function smarty_resource_db_trusted($tpl_name, &$smarty)
{
// 能否信用
return true;
}
?>