天天看点

《Android和PHP开发最佳实践 》一3.5 认识Smarty模板引擎

如果你说学过php而没学过smarty模板引擎,我相信所有的面试官都会觉得你在撒谎。虽然php语言本身就可以嵌入到html页面中去进行数据展现,但是这样做我们不仅需要书写大量的<?php ?>标签,而且在某些地方还需要嵌入大量的冗余代码,另外也不利于逻辑的解耦和分离。所以,在项目中我们还是需要一个专门的模板引擎,而smarty就是php语言在这个领域的不二选择了。

《Android和PHP开发最佳实践 》一3.5 认识Smarty模板引擎

小贴士:如果你找不到站点目录,请返回查看3.2.3节中apache配置虚拟主机的部分内容。

以上这个界面就是由smarty模板引擎渲染出来的页面,其对应的php文件的代码,见代码清单3-15,已添加注释,方便读者阅读。

代码清单 3-15

常用配置选项

在使用smarty模板引擎之前,我们必须先学习如何配置smarty的选项。而在smarty的常见选项中,我们首先必须了解4个最基本的目录选项。

模板目录(template):本目录用于存储模板文件,需要渲染对应文件时把文件相对地址作为参数传入display方法即可。比如,我们有一个模板文件地址位于template/test/index.tpl,那么我们则应当使用“$smarty->display('test/index.tpl');”语句来渲染该模板。

编译模板目录(template_c):本目录主要用于存储smarty模板引擎产生的模板编译文件,smarty也正是使用这种方法来提高执行效率的。当然,我们在部署项目时一定要注意该目录必须是可写的。

缓存目录(cache):smarty允许把展示过的模板缓存起来,使用此功能将进一步提高模板引擎的运行速度。当然,我们还可以通过设置cache_lifetime属性来控制缓存文件的有效时间。

配置目录(configs):这个目录可以用于保存smarty模板引擎的配置文件,不过在实际项目中使用得比较少,我们经常会把配置放入项目统一的配置目录。

在实际项目中我们经常使用继承和重载的方式来定制和配置我们自己的smarty模板类。比如,在代码清单3-16中,我们就实现了一个自定义的my_smarty类,此类中设置了smarty模板的必要目录和缓存的生效时间。

代码清单 3-16

在上述代码中,settemplatedir方法用于设置模板目录,setcompiledir方法用于设置编译过的中间模板目录,setconfigdir和setcachedir方法分别用于设置smarty模板的配置文件和缓存文件的目录。

常用模板语法

smarty 3.0中的语法实际上和php的语法已经比较接近了,使用起来相当方便。接下来让我们来熟悉一下smarty模板语言的基本用法。首先,我们要知道所有的smarty的默认界限符号是大括号(当然这个也是可以设置的)。因此,我们可以通过类似于“{$var}”的写法来获取smarty变量“var”的值。其次,smarty中为我们提供了大量的字符串辅助标签,非常方便,例如,如果需要把某个变量的首字母大写,使用方法如代码清单3-17所示。

代码清单 3-17

另外,如果我们想把时间戳转化为需要的时间格式,使用方法如代码清单3-18所示。

代码清单 3-18

此外,我们还可以使用代码清单3-19中的类似方法来过滤非法字符,避免xss(跨站攻击)的风险。

代码清单 3-19

接下来,我们还会介绍一下在展示过程中最常用到的循环语句的写法。实际上在smarty中有两种最常用到的循环语句写法,一种是“{section}”,另一种是“{foreach}”。现在假设我们需要循环一个散列数组列表“$userlist”,散列数组中包含“id”和“name”两个字段,示例见代码清单3-20,大家可以好好理解一下。

代码清单 3-20

从上面的代码中可以看出,smarty 3.0的foreach用法已经和php的语法非常类似了,既容易理解又方便实用,推荐大家使用。另外,在smarty中注释默认使用的是“{...}”标签,这个也需要大家了解一下。

由于篇幅限制,smarty模板引擎的基本使用我们介绍到这里,关于其更多的信息请大家参考官方的文档并动手实践一下,毕竟smarty模板也是使用php进行服务端开发的必不可少的一项技能。