Smarty是由Monte Ohrt和Andrei Zmievski写出的PHP模板引擎。它不同于其他的模板引擎,比如FastTemplate或者patTemplate,其中主要原因就是Smarty会将模板转化成PHP脚本,并剔除每次使用该模板时都会出现在解析环节里的用来控制和错误检验的附加码。这个功能使Smarty在大型应用和高流量网站上有优异的表现。

Smarty除了模板编译还有很多其他的突出特性,我们会在后面详细的讨论。首先,我们来揭秘模板编译。“模板的编译”是什么意思?网页需要做什么样的编译?编译不是C++和Java也要做吗?是的,但是这里的编译会稍有不同。

Smarty将你的模板解析,然后转换成PHP脚本,而不是二进制码,像在一般的编程中做的那样。这样,当你的网页被浏览时,Smarty直接读取PHP脚本文件,而不是模板本身,这样就节省了再次解析的时间。Smarty在决定何时编译上也很智能,他只在你对网页有实际的更改的时候才会重新编译,所以你不需要担心手动编译会出现问题。这样做的好处就是你不需要了解任何关于PHP脚本和编码的知识。这些都是在后天操作的,所以如果你的模板设计师甚至都不需要知道Smarty是一个“模板编译引擎”。

Smarty也以自动缓存模板输出而著名。Smarty将模板的输出内容缓存,这样就省下了在从数据源重新取回数据时的系统支出。数据源通常都是外部的,而且很慢,所以也经常是你的应用的瓶颈,如同远程数据源一样。Smarty将你模板的输出连同从数据源取得的数据一起缓存,这样并不是每次你的网页被访问时你就去连接数据源。如果你有一个反应慢的数据源服务器或者对数据源有多种请求,这种缓存功能会大大提升网页的性能。

当然,有时你并不像让模板的输出被缓存,比如说证券报价机或者你不停的修改你的数据源并期望立刻在网页上反应出这些变化。这些都没问题!Smarty同样允许你定义哪些需要缓存哪些不需要。事实上你可以将缓存和没有缓存的内容放在一个页面上,因为Smarty可以准确的定义什么可以被缓存(比如万年不变的导航栏)和什么不可以被缓存(比如网页底部的证券机)。你也可以设定缓存内容的有效期,这样模板的内容只会被缓存一段时间。这样你就可以在实时更新的大量资讯和更快速的网站体验中找到平衡。

有一点需要指出的是,这种缓存功能和Zend Cache或者其他的PHP加速器完全不一样。类似Zend Cache的缓存工具都是将PHP脚本编译后产生的字节码缓存起来,而Smarty缓存的是你的模板的输出(其实就是一种PHP脚本)。因此,Smarty可以与Zend Cache并肩作战。通过基准测试已经发现这是一种完美的解决方案。正如引擎创作者所说:当和PHP加速器一起使用时,Smarty的表现确实有所提升。Smarty也提供变量修改功能。你可以把字符串大写、切割、查找和替换。

变量修改器简化了编程的过程,绕开了程序员经常使用的专业语法。这样模板设计者就会对模板变量的格式有更好的控制,虽然他首先得知道哪些变量修改器是可用的。这是个很有用的功能,因为句法变得简洁,而且不是程序员的人也可以使用它。Smarty也在你的模板中提供了很多内置的和习惯使用的函数。这些函数就像模板的应用编程接口,除了习惯使用函数可以被修改而内置函数不能。这些函数可以让4F60实现条件输出(使用if语句),动态循环迭代(使用foreach或section语句),读取config文件等等功能。

过滤器

Smarty可以将过滤器分类,让你可以在模板被编译之前或者之后运行过滤器。预过滤器在你的模板运行前使用,后置过滤器在模板被编译后使用,输出过滤器会过滤模板的输出结果。为什么使用过滤器?你可能会问。预过滤器可以去掉你不想要的内容,确保你不想要的内容不会被编译。后置过滤器可以再模板被编译后加入附加的信息,比如创建时间。输出过滤器可以让你修改模板的输出,比如隐藏掉所有的电邮地址以垃圾邮件的骚扰。

Config 文件

Config文件是可以储存模板的全局变量的配置文件。这样你就能把一些影响到所有模板的全局变量集中储存在一个地方。一个典型的例子就是所有模板的配色方案。如果配色方案需要修改,模板设计者只需要改变配置文件中的值。这样他们就不必一个一个的修改每一个模板。

插件

Smarty插件架构自2.0版本就出现了,它能让Smarty更加用户化。前面讨论的预过滤器、后置过滤器等都是可用的插件类型而已。其他的插件类型包括修改器、控制模块、编译器等。使用插件,你可以制作自己的模板函数,变量修改器和过滤器。你还可以使用资源插件改变Smarty的读取数据格式(默认是展平文件)。通过资源插件,你可以将你的模板保存在数据库里,通过一定的接口取回数据。

结束语

将Smarty的模板编译功能和PHP固有的效率结合在一起,你就拥有了绝对的速度优势。使用设计优良的插件构架,Smarty还有扩展的函数功能,包括模板功能和变量修改器。速度和函数性的提高并没有影响Smarty的亲和度,事实上,Smarty非常容易上手。Smarty同时也配备了在线共享文档。你可以从Smarty Website上下载。Smarty的作者之一,Andrei Zmievski,也是PHP发展小组的成员,他会尽量保证Smarty紧跟PHP的发展。所以你大可放心:PHP的任何改版都会被Smarty支持的。

PHP模板引擎Smarty详解相关推荐

  1. freemaker模板引擎使用详解

    目录: 一.freemaker介绍 二.freemaker的使用 正文: 一.freemaker介绍 1.1FreeMarker概述:FreeMarker是一款模板引擎,即一种基于模板和要改变的数据, ...

  2. java h5模板引擎_详解SpringBoot+Thymeleaf 基于HTML5的现代模板引擎

    序言: Thymeleaf 是Java服务端的模板引擎,与传统的JSP不同,前者可以使用浏览器直接打开,因为可以忽略掉拓展属性,相当于打开原生页面,给前端人员也带来一定的便利.如果你已经厌倦了JSP+ ...

  3. java模板引擎 jade_Jade模板引擎使用详解

    在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...

  4. php ejs,EJS模板引擎实例详解

    前面的话 nodejs的模板引擎有很多, EJS是比较简单和容易上手的.本文将详细介绍EJS 概述 EJS是一个简单高效的模板语言,通过数据和模板,可以生成HTML标记文本.可以说EJS是一个Java ...

  5. flask中jinjia2模板引擎使用详解5

    接上文 宏 可以理解为函数,即把一些常用的模板片段做好封装,以便于重用,减少工作量和维护难度. 宏的定义很简单: {%macro xxx()%} ##这里写内容 {%endmacro%} 下面引用官方 ...

  6. java模板引擎 jade_模板引擎Jade详解

    有用的符号: | 竖杠后的字符会被原样输出 · 点表示下一级的所有字符都会被原样输出,不再被识别.(就是|的升级版,实现批量) include 表示引用外部文件短杠说明后面跟着的字符只是一段代码(与| ...

  7. php模板引擎循环start,PHP模板引擎Smarty内建函数section,sectionelse用法详解

    本文实例讲述了PHP模板引擎Smarty内建函数section,sectionelse用法.分享给大家供大家参考,具体如下: section 是 Smarty 模板中除了 foreach 以外的另一种 ...

  8. PHP模板引擎Smarty内建函数section,sectionelse用法详解

    本文实例讲述了PHP模板引擎Smarty内建函数section,sectionelse用法.分享给大家供大家参考,具体如下: section 是 Smarty 模板中除了 foreach 以外的另一种 ...

  9. PHP模板引擎smarty详细介绍

    篇文章主要介绍了PHP模板引擎smarty详细介绍,本文讲解了什么是smarty.smarty优点.不适合使用smarty的地方.smarty目录结构及版本,需要的朋友可以参考下 /* 一.什么是sm ...

最新文章

  1. 5G的3大应用场景落地开花,中国或将引领全球5G产业发展
  2. 从源码角度分析MapReduce的map-output流程
  3. 初入react -01
  4. Silverlight 游戏开发小技巧:轨迹跟随效果
  5. 转]网络上收集的Visual Studio 2008的一些小技巧
  6. ubuntu12.04中shell脚本无法使用source的原因及解决方法
  7. beta 圆桌桌 4
  8. Android简单实现BroadCastReceiver广播机制
  9. 盘点大厂的那些开源项目 - 华为
  10. 3G应用上新闻联播 TD-SCDMA被内定?
  11. PHP删除目录及目录下所有文件
  12. java transient 应用场景_关于java:transient关键字的用途是什么以及何时使用它?...
  13. python中读取txt文件、统计其中所有字母出现的频度_python——pandas练习题6-10
  14. 四川大学网络教育计算机网考,四川大学网络教育学院课程考试试题-第一学期期末考试卷-计算机文化...
  15. Linux下点阵汉字的字模读取与显示
  16. python栈是什么意思_Python算法之栈(stack)的实现
  17. php easysms,Laravel 短信发送组件 - easy-sms
  18. 英国脑科学领域_来自英国A级算法崩溃的数据科学家的4课
  19. 膜拜!阿里内部学习的五大深入理解Java虚拟机PDF,真的强
  20. Scala 之 Map 操作大全

热门文章

  1. Dropzone插件的使用(从前台到后台完整流程)
  2. Dropzone实现图片文件上传
  3. React Native for Android 实践 — 实现知乎日报客户端
  4. 技术往事:微信估值已超5千亿,雷军曾有机会收编张小龙及其Foxmail
  5. Buildroot--介绍
  6. mqtt服务器搭建php,MQTT 服务端
  7. CAXA 3D实体设计2021:开创全新的数字化设计体验
  8. 正则匹配html中url,JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
  9. matlab中维数的理解
  10. 使用Streamsets将Oracle数据实时同步到MySQL中