smarty模板

  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解释器仍然要去执行。

  这个原因,那么缓存就需要完全静态化。

原文地址:https://www.cnblogs.com/firstForEver/p/5229401.html