Smarty使用细节与编译技术
1、1.当我们第一次访问模板文件时,系统会自动生成编译文件,当第二次访问时,如果模板文件没有改变,系统则自动调用编译文件。
如下图所示:当我们第一次访问demo01.html模板文件时,系统会自动生成编译目录templates_c并会自动在编译目录中生成编译文件:

2、2.打开编译文件,效果如下图所示:

3、3.Smarty执行流程

4、4.Smarty是通过记录模板文件的最后修改时间来判断模板文件是否发生改变的!任何一个文件(电子文档)都有三个时间(创建时间、修改时间、访问时间)

5、5.Smarty中的相关属性
• left_delimiter :左分界符,默认为{
• right_delimiter:右分界符,默认为}

6、6.在实际应用中,如果你不习惯使用{}花括号可以更改这两个属性,如下图所示:

7、7.但是要注意,更改完成后,在模板中调用标签也需要使用以上方式,如下图所示:

8、8.与路径相关的四个属性
• template_dir :模板目录,默认为templates
• complile_dir :编译目录,默认为templates_c
• config_dir :配置目录,默认为configs
• cache_dir :缓存目录,默认为cache
以上默认路径都可以在Smarty.class.php入口文件中查找到,如下图所示:

9、9.但是在Smarty2.0中,以上四个属性是公有属性,但是在Smarty3.0版本之后,以上四个属性都被声明为私有属性,但是我们还是可以在类的外面实现对以上四个属性的访问,如下图所示:

10、10.说明:虽然以上四个属性在Smarty3.0版本之后被声明为私有属性,但是其受到魔术方法__set与__get的影响,依然可以在类外访问。

11、11.__set与__get魔术方法功能:
当我们访问一个不存在或私有属性时,系统会自动调用__set与__get进行设置与获取操作。
特别注意:虽然可以通过以上方式访问私有属性,但是不建议这样去使用,如果想设置相关的路径信息,可以采用如下四个方法进行替代:
① setTemplateDir() :设置模板目录
② setCompileDir() :设置编译目录
③ setConfigDir() :设置配置目录
④ setCacheDir() :设置缓存目录

12、12.两个常用方法assign与display
1)assign方法:分配变量到模板文件
调用该方法主要主要是为Smarty模板文件中的变量赋值,可以传递一对名称/数值对,也可以包含名称/数值对的关联数组。
2)display方法:显示输出模板内容(替换标记)
基于smarty的脚本必须使用这个方法,而且一个脚本中只能使用一次,因为它负责获取和显示由Smarty引擎引用的模板。
