`
syu
  • 浏览: 16040 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于选择smarttemplate的一些原因,以及对其做的一些修改

阅读更多

我从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的功用.

如果有想要的.可以邮件/站内短信给我.提供给大家.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics