Apr
21
花了半天的时间把smarty手册大概翻了一下,总结了一些使用要点和技巧。
先来说说安装
安装也许要说?恩,其实还是有点小学问的,我是通过继承来实现安装的,看代码
//setup.php
require("libs/Smarty.class.php");
class Smarty_C extends Smarty{
function Smarty_C(){
$this->smarty();
$this->template_dir = 'templates';
$this->compile_dir = 'templates_c';
$this->cache_dir = 'cache';
$this->left_delimiter = '<{';
$this->right_delimiter = '}>';
$this->caching = 1;
$this->cache_lifetime = 1800;
$this->config_dir = 'config';
//regist functions
$this->register_block('dynamic','smarty_block_dynamic',false);
}
}
function smarty_block_dynamic($param, $content, &$smarty) {
return $content;
}
我觉得这样更方便管理,可以在类里面完成插件的注册,而不用实例化一个对象后再注册,使用方法还是类似
require('setup.php');
$smarty = new Smarty_C();
//$smarty->assign('title','hello lzyy');
$smarty->display('test.tpl');
Jul
18
之前使用Smarty是想都没想,反正听说她很好,有缓存,又能编译,运行起来多少多少快啦,代码程序分离啦,提高效率啦等等。所以一股脑儿照着写就是了,但是现在回过头来仔细想想,还是有不少问题。
比如,同样的一个页面,当传递的参数不一样时,就像test.php?id=1,如果id变为2,那么缓存会变成什么样,是变成2个缓存文件还是只有一个?
这个问题的答案是这样的,如果直接display('test.tpl'),那么缓存只有一个,而且当id变为2时,缓存不更新,因为缓存更新的前提是模板或者配置文件的改变。那如果要为每一个参数生成一个缓存呢,也很简单,只需加入第二个参数,比如display('test.tpl','cache_id'),这里的cache_id就是传递过来的参数,这样就相当于执行了查询缓存。(所以如果数据库很庞大的话,缓存也会很庞大)
以前做网站的时候也遇到过这样的问题,就是基于Smarty的网页,如果更新控制层的php文件而不是模板文件,并且已启用了缓存,那么缓存的页面是不会更新的。如果不使用缓存,那么改变控制层的php文件时,并不更新编译文件而是直接读取目标php文件。
不知道这么说清不清楚,其实只要自己做一下实验就行了,改变控制层的php文件,然后观察编译文件和缓存文件的修改时间,就很明了了。
