smarty学习总结

文章分类:PHP | 只有1条评论  查看次数:605 + 35

花了半天的时间把手册大概翻了一下,总结了一些使用要点和技巧。

先来说说安装

安装也许要说?恩,其实还是有点小学问的,我是通过继承来实现安装的,看代码

//setup.

<?
require("libs/.class.");
class Smarty_C extends {
    function Smarty_C(){
        $this->();
        $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, &$) {
    return $content;
}

我觉得这样更方便管理,可以在类里面完成插件的注册,而不用实例化一个对象后再注册,使用方法还是类似

<?
require('setup.');
$ = new Smarty_C();
//$->assign('title','hello lzyy');
$->display('test.tpl');
 

Read more

浅谈Smarty缓存

文章分类:PHP | 共2 条评论  查看次数:496 + 122

之前使用是想都没想,反正听说她很好,有缓存,又能编译,运行起来多少多少快啦,代码程序分离啦,提高效率啦等等。所以一股脑儿照着写就是了,但是现在回过头来仔细想想,还是有不少问题。

比如,同样的一个页面,当传递的参数不一样时,就像test.?id=1,如果id变为2,那么缓存会变成什么样,是变成2个缓存文件还是只有一个?

这个问题的答案是这样的,如果直接display('test.tpl'),那么缓存只有一个,而且当id变为2时,缓存不更新,因为缓存更新的前提是模板或者配置文件的改变。那如果要为每一个参数生成一个缓存呢,也很简单,只需加入第二个参数,比如display('test.tpl','cache_id'),这里的cache_id就是传递过来的参数,这样就相当于执行了查询缓存。(所以如果数据库很庞大的话,缓存也会很庞大)

以前做网站的时候也遇到过这样的问题,就是基于的网页,如果更新控制层的文件而不是模板文件,并且已启用了缓存,那么缓存的页面是不会更新的。如果不使用缓存,那么改变控制层的文件时,并不更新编译文件而是直接读取目标文件。

不知道这么说清不清楚,其实只要自己做一下实验就行了,改变控制层的文件,然后观察编译文件和缓存文件的修改时间,就很明了了。