Smarty的模版编译是它最强大的功能之一,当第一次读取模版文件时,Smarty会依据你的模版文件在编译目录中自动创建相应的PHP脚本文件,即编译文件,当你再次访问模版文件时,Smarty读取的是编译后的文件,而不是真正的模版文件,同时它会自动判断模版文件是否有过更新,如果模版文件已被更新,则它会从新生成新的编译文件。
关于编译文件的一些属性及方法
$compile_dir
用于设定存储编译文件的路径信息,默认./templates_c,即当前PHP脚本所在目录下的templates_c目录。如:
1 $smarty->compile_dir = 'lib/smarty/templates_c';
setCompileDir(string compile_dir);
与$compile_dir变量功能一下,用于设定编译文件的存储路径信息。
注:推荐使用该方法设定编译文件路径。
1 <?php 2 3 // 设定编译文件的存储路径 4 $smarty->setCompileDir('./templates_c'); 5 6 // chaining of method calls 7 $smarty->setTemplateDir('./templates') 8 ->setCompileDir('./templates_c') 9 ->setCacheDir('./cache'); 10 11 ?>
getCompileDir()
用于获取存储编译文件的路径信息
1 <?php 2 3 // get directory where compiled templates are stored 4 $compileDir = $smarty->getCompileDir(); 5 6 ?>
$compile_check
如果将该变量设置为true,则在每次显示模版文件之前判断该模版内容是否有过变更,如果模版文件变更过,则重新生成编译文件,否则使用已存在的编译文件,如果不存在模版编译文件,则Smarty会忽略该设置,而总是生成一个编译文件。默认值为true。
注:当应用程序最终投入使用时(模版文件不会被更改),应当关闭该选项,以获取最大性能。
注:如果关闭该选项,当模版文件变更时,将不会显示变更后的内容,除非重新生成了编译文件。
在Smarty3.1以后版本中,可以将该变量设定为Smarty::COMPILECHECK_CACHEMISS,当需要生成一个缓存文件时,编译文件将会被检查是否有效。因此,当一个缓存文件过期时,在生成缓存文件之前编译文件将会先被检查是否有效。
$force_compile
如果设定该值为true,那么在每次请求模版文件时,都会强制重新生成编译文件,该选项会忽略$compile_check,默认为false。在开发过程中,打开次选项是一个好的选择。如果开启的缓存文件,则缓存文件在每次请求时也会同样被强制重新生成。
$compile_locking
该选项用于禁止同一时间内对同一模版进行多次编译,默认为true,如果要禁用次功能,设置值为false。
$compiler_class
指定生成编译文件时做调用的类文件,默认是Smarty自带类Smarty_Compiler。