我从2000年开始使用PHP做为Web应用的脚本语言,数年前接触到smarty以及smarttemplate,
在此过程中,两者都用过不少时间.两下比较后,后来就一直使用smarttemplate,而不是广泛流行的smarty.
其原因不仅仅是smarttemplate较之smarty更轻巧也小得多.
更重要的.是我认为模板所在的显示层,不应该承担起太多的逻辑判断与行为处理.(无可避免,但我认为应该最小化减轻在显示层做这些工作.)
使用模板引擎的目的不外乎二:
一者是使代码尽量和显示结构分离,
二者是能让工作尽量分工,程序员专注于数据,前端设计师专注于页面结构.
从前者的角度来说,如果在模板里夹杂太多运算,逻辑,甚至数据处理的程序内容.无疑是在开历史的倒退车.这样做跟直接在HTML里<?php 有什么区别呢?
从后者的角度来说,也许很多公司没有细分职责.大部份是程序员连程序带切页面一起处理完.所以站在这个角度smarty比之smartemplate就具有不少优势.因为可以一边处理页面代码一边"顺便"就用smarty的语法来完成一些逻辑控制之类的东西.殊不知这样看似方便的背后其实在破坏着一个良好的逻辑控制/显示 分离的结构.造成项目的维护性和扩展性降低.
不过smarttemplate也有一些麻烦的地方,一来是自06年开始就未再更新.
二来是无法引用一些全局变量.页面中所有的变量都得先assign注册,这样会造成诸如放在session中的用户昵称,ID等.为了在每个页面上显示.每次都得assign一次.颇不方便.
smarttemplate的控制功能只提供了IF ELSE BEGIN的基本语法.将对显示层的破坏降低到最大层度.但是IF中可供选择的项太少.
只能是 注册变量 比对 一个固定的值.无法用 注册变量比对注册变量.亦无法使用and or等基本语法.使得灵活程度相对降低.
(即使我们应尽量避免在页面中处理逻辑.但有些地方仍无可避免....:-( )
我对这些做了一些修改.在原有代码基础上增加了{SESSION.uid},{GLOBALS.test}之类的全局变量引用方法.
对IF做了些改写,使IF能支持如 <!-- IF {a}>{b} AND {c}<5 -->的写法.
亦对BEGIN做了略为修改.使之实现类似foreach的功用.
如果有想要的.可以邮件/站内短信给我.提供给大家.