Andy's Blog » » 说说PHP模板引擎

说说PHP模板引擎

今年在写CMS的时候,对比测试和使用过多个模板引擎,最终选定的就是SmartTemplate了,小巧快速,模板语句比较完美.
选择时,先是phplib,然后fasttemplate,smarty,等等,很多个,都有些记不清了,phplib用一下,再用SmartTemplate,就知道为什么要把phplib给扔了,其他的也一样
这些模板的操作无非就是一些变量的替换和一些循环的输出还有条件判断什么的,都需要在套用模板前先给模板里的变量赋值,也就是说,不能逆向的使用.
好像smarttemplate这个模板引擎已经停止开发了,现在项目已经转成 quickskin
http://smarttemplate.sf.net

DEDE自己写的模板原理,是逆向的,也就是类似{dede: 分类=i,数量=n}{/dede}这样来反向生成查询语句
大体知道它的原理和应用,但我没有去研究它,因为觉得DEDE的代码没有观赏性
而其他的模板引擎,i和n都必须在模板的上层就已经定义

我想了许多方法使SmartTemplate可以逆向的使用,因为这涉及到站点的规划和许多问题
要么在站点的全局设置里,把各模板要用到的参数先定义好,或者把各个已知要使用的参数定义好,不逆向使用
要么在模板里把这些参数定义好,然后写个函数在初始化时去读取,这样就可以逆向了
我这里举个后者的例子

<!-- BLOCK name=andylist cat=1 num=10 -->
<!-- BEGIN andylist -->
......
......
<!-- END andylist -->

在SmartTemplate中是没有

<!-- BLOCK name=andylist cat=1 num=10 -->

这样的语法的
所以,我自造的这句,就要在上层程序里,先读取模板,解析

<!-- BLOCK name=andylist cat=1 num=10 -->

这句,得到 i n
然后自动生成相应的sql语句,并将结果赋值给模板里的andylist
这样做

<!-- BLOCK name=andylist cat=1 num=10 -->

这句不会被解析,会在源文件里,所以,还要在SmartTemplate的解析过程前加上,把这些东东自动删除掉的语句
或者觉得这样写更漂亮

<!-- BLOCK andylist,1,10,xx,xxx,xx -->

怎么写,完全取决于你的自造解析函数

其实,也就是相当于把配置参数放在模板里,在程序模板解析前,去获取这些参数.

SmartTemplate还有一小部份扩展可以下载使用,可以参照里面的写法自己再写一些扩展应用
这样加强以后,我想这是一个比较好的解决方案了

Incoming search terms:

Tags: PHP, 模板, 引擎

本文地址: http://www.21andy.com/new/20071209/717.html

2 评论 to “PHP开源CMS之MODx”

  1. xLight 于 2007-12-10 11:50:43 发表:

    请说出3个一定要“逆向使用”的理由。

    从思想上来说,他不是很符合MVC吧?
    当然有一些规则我们没必要严格遵守。

  2. Andy 于 2007-12-10 14:06:54 发表:

    仔细说的话,说来话长了
    简单说,“逆向使用”的好处就是,程序是根据模板来生成的,否则,模板就是根据程序来做的
    MVC并不适合所有工作都由一个人来做的站长
    如果站点只由一个人来完成,我觉得“逆向使用”会好一点,因为这些"BLOCK",更重要的是"BLOCK"里的元素是活的,可以自由的在模板里添加,删除,修改,而不需要去改别的地方,特别是对不懂程序的
    站长,他们更喜欢这样的.