smarty模板引擎。基于MVC开发,实现m、v的分离。
一个libs的smarty库。创建模板和编译后的文件夹。
assign、display、templates、templates_c等名词的意思。
引入smarty核心类文件。这个类作用实际就是把一些模板文件的标签翻译成php代码。然后交给web服务器。
分配assign,实则是向$smarty对象的一个数组属性里塞值。
翻译的过程,display()这个函数,利用了正则去解析模板标签,转化成了php代码。
补充一个正则替换的例子。
<?php $str = "123abc888dd001cc";// 把三个数字的前边和后边加上== echo preg_replace('/(d{3})/', '==${1}==', $str);
如果templates_c内部存在了这个对应模板的编译文件,并且生成时间小于模板的修改时间,那么每次访问只需要访问这个编译后的文件。
new Smarty后,可以更改smarty属性,比如view中解析模板的左分隔符、右分隔符,是否启用缓存、缓存目录、模板目录、编译文件的目录等等都可以动态修改。
view模板里读取配置:<{config_load file="文件位置"}> 取key值:<{#key#}>
view里读取全局变量:<{$smarty.get.queryString}>、<{$smarty.post.some}>、<{$smarty.server.SERVER_NAME}>、session等
smarty的一些常用的内建函数:比如上边的config_load就属于内建函数。
foreach、foreachelse、insert、include、include_php、section、
比如<{foreach from=$arr item=val key=k }>XXXX<{/foreach}> 这些标签都可以自定义的,利用的仍然是php代码。
自定义标签函数,注册使用:register_funtion($tag_name, $function_name);或者register_block();
view使用标签<{tag_name 各种属性啥的,就是function_name里的传入参数 }>
smarty缓存:设置缓存目录;开启缓存;缓存时间长度;
为什么说有了翻译后的目录文件了(templates_c),还需要缓存呢?实际上翻译文件只是判断了模板文件是否更改,而重新生成。这意味着控制器里的东西,比如分配变量的不同,即使读编译文件也是会跟着不同,编译文件实际也是个php脚本文件。php解释器仍然要去执行。
这个原因,那么缓存就需要完全静态化。