smarty学习总结

文章分类:PHP  查看次数:465 + 31

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

先来说说安装

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

//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');
 

config文件的设置

除了建立常规的templates,templates_c,cache文件夹外,我觉得config文件夹也很必要,可以在里面建立config文件,然后在模板里载入

比如config文件夹下面,有一个test.conf文件

# global variables
bgcolor = '#cc0000'
title = 'hello world'

# customer variables
[customer]
title = 'hello lzyy'
 

然后就可以在模板里载入,并使用其中的变量了

<{ config_load file='test.conf' section='customer' }>
<{ include file='header.tpl' title=#title# }>
<body style='background:<{ #bgcolor# }>'>

config里面的变量通过#varname#来获取,同时如果在config里面,指定了section,比如上面的customer,并且在载入config文件的时候指定了相应的section,那么就可以使用该section里面的变量(全局变量自动载入,如果section里面的变量名跟全局变量的变量名一样,那么前者将覆盖后者)

关于缓存

拿动态内容作为例子,如果涉及到根据传递的参数查询数据库,比如user_id,那么有两种缓存策略

1、使用display($filename,$user_id)
这样就能为不同的user_id产生不同的缓存文件,但是问题也来了,如果用户数很多的话,那么会在缓存文件夹里生成很多的类似文件,无论是从磁盘占用,还是查询速度都会受到影响。

2、对动态内容不执行缓存
可以通过两种方法来解决。一个是内置的insert方法,我感觉这个不够灵活和方便;第二个方法就是我们在安装的时候注册的一个函数dynamic,使用方法

<{ dynamic }>
<{ '0'|date_format:'%D %H:%M:%S' }>
<{ /dynamic }>
 

插件

插件默认都放在plugins文件夹下面,如果自己想写一个插件,只要把写完的插件按照的方式命名,并放到这个文件夹下面就可以使用了。

插件的使用方法

function usage:{funcname data='hello baby'}(function.name.
modifiler usage:{$data|upper}(modifiler.name.
block usage:{func} ... {/func}(block.name.

具体的参数可以参考手册,后者直接打开相应的文件查看。

小提示

  • 如果一个变量为空(''),并且要输出一个默认值时,可以使用default(eg:$text|default:' ')
  • 很方便的一个特性是支持include,并且里assign的变量可以在include进来的file里显示
  • 如果要显示时间的话,最好传递给一个时间戳,这样就能方便地控制时间的显示格式
  • 内置了对全局变量的引用,比如{$.get.page},{$.cookie.name}
  • 使用section代替foreach

闲言碎语

由于很好很强大,有不少自己的用法,所以有人爱之,有人恨之。反正我是挺喜欢的,其实常用的功能就那么几个,花个一两天足矣掌握,而那些附加的功能也提供了更多的解决办法,但千万不要以为,功能越多,执行速度就会受影响,其实不是的,因为那些附加功能都是用到的时候才载入的。还有,使用的网站,基本都是给予MVC架构,那么就会有一个问题,到底该不该在前端表现层出现逻辑判断和流程控制?在《Sams Advanced Programming》里,里面讲到view层可以出现display logic but not business logic。也就是说可以出现表现方面的逻辑判断而不是应用方面的逻辑判断(有点不好理解,hoho)。

评论

共1条评论 to “smarty学习总结”

  1. 手气不错 on 2008-04-21 8:46 pm
    Gravatar

    Smarty 能改变你编写 PHP 的习惯,加油

    [回复此评论]

发表评论