TagFeatherWeb 开发模板引擎
TagFeather 是一个让美工不用去学任何程序代码,只需要借助流行工具就能所见所得的预览的 Web 开发模板引擎。简单的讲,页面设计人员只需要按照程序员指定的 CSS Class 和 ID 就什么都不用管了。对于程序员来说,TagFeather很 容易掌握,而且开放的结构使得扩展极为方便。TagFeather 目前还只有PHP实现的版本,但将来会在各种语言上实现的。
TagFeather 有什么优点 和其他 PHP 模板 模板比较。TagFeather 比现有的所有模板都更美工欢迎。因为他们不需要学任何其它程序语言或者模板语言。他们用普通HTML工具预览所得到的结果就是最终输出结果的小样。相比使 用内嵌代码的而其很多只见结构不见预览的模板比如 Smarty 来说这是一种质的飞跃,对于使用标记性标签,如 Struct,ASP.Net 来说 TagFeather 则不需要专用的编辑器来预览。相比另一个优秀的PHP模板引擎PHPTAL,TagFeahter 则是不必一定在模板html 文件中加入特殊属性。 TagFeather 的原理是用自定义的 SAX 引擎解析宽松 xml 格式的模板文件。编译成和 TagFeather 引擎无关的 PHP 代码。常见的模板引擎如 Smarty 则是通过解析编译字符串得到编译后代码的。TagFeather的 各种功能都是用钩子函数来实现的。TagFeather 编译后的代码是原生,不需要额外支持就可以执行的 PHP代码。 TagFeather 为了更方便程序员和美工 所见所得 页面设计不再只见结构不见预览结果,不需要任何辅助工具。 完全的页面设计和程序逻辑分离 不需要在模板HTML文件中加入任何奇怪的东西。 不必学任何模板语言 页面设计人员不需要。程序员也只需了解一些特殊的属性怎么用,可以用 PHP 语言来检查配置。 容易入门 因为不需要学习模板语言,所以页面设计是几乎0学习成本,程序员学习的成本也低于 smarty 方便的格式重排 你可以实现现有模板都很难做到的功能:预览横排但不满足整除关系的表格。 如果设计得当,模板输出文件甚至可以作为输入模板使用。
运 行速度快 TagFeather 编译后的代码是不需要 TagFeather 支持的。和某号称“It is extremely fast”,但实际上是效率最低下的某模板引擎比起来。TagFeather 编译后的文件就和你不用任何模板自己写的一样。 编译出来的文件可读 用某模板的人都不知道生成的代码是怎么样的,但 TagFeather 让你很清楚你做的是什么。
可以做辅助设计 即使你不相信 TagFeather 在运行时候的表现,你也可以用他编译出来的 PHP 文件。因为编译出来的文件很容易明白。
方便 确实很灵活方便开始建模的时候可以把代码,配置和模板三个文件混合写在一起。后来可以把代码,配置写在一起。或者你也可以三者分离。 扩展性强 TagFeather 的功能都是由钩子函数实现的,写一个钩子函数是很容易的事情。 不需要配置 简单项目 通用 大部分模板都很容易转为TagFeather 模板 模板可以和代码混用。你可以在模板里自由书写代码,但是也可以设置为模板安全。 安全 有插件使得模板是安全的,就是只能 增强的XML解析器 TagFeather的 模板文件是XML,但是TagFeather的 解析器做了一些改进,你可以在属性和文本区域里混合使用宿主语言(当前是PHP)和普通文本。 TagFeather 的缺点 TagFeather 目前还没有经过大规模的应用考验。 TagFeather 的编译效率和文档复杂度有关,编译效率很低,简单的页面不到1秒,能每次运行时都可以实时编译。但复杂页面会导致运行超时。编译前后效率比可达 1000:1以上。 TagFeather 支持 GB2312 编码,但理论上对 GBK编码会有问题。 TagFeather 的产品完成度还不够,作为一个程序合格,但是作为一个产品,还有很多不足。尽管我已经竭力以产品角度来对待 很多从非 TagFeather 的模板转移到 TagFeather 的麻烦在于: TagFeather 要求输入的必须是可以含标准服务端属性的 XML文件。 XHTML 的一些属性导致那些源模板不符合 XML。尽管TagFeather已 经够宽松了。 编译型的模板的一个缺点:必须要可写的文件作为缓存。 TagFeather 的特点 TagFeather 的工作原理是用 SAX 方式 解析 xml 模板输出解析后数据,和一般通用 的 SAX Parser 解析器不同的是: TagFeather 的 SAX 解析器 TF_XmlParser 是支持带服务端标记 <? <% 的,而且不会替换 & 实体符号。而且 而且做了部分扩充 根据系统和用户添加的解析钩子,TagFeather 因此得到不同的输出。 TagFeather 的输入和输出都是可稍微扩展的 XML 文件 TagFeather 为什么没有缓存系统? 缓存系统不是模板系统考虑的事,TagFeather 推荐使用 Pear::CacheLite 配合生成实静态化。