PHP模板引擎|Smarty模板继承|smarty缓存设置原理和注意事项

发布时间:2017-05-10 编辑:小张个人博客 查看次数:2637

什么是Smaty

Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

smarty特点

1. 速度:采用Smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。

2. 编译型:采用Smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下)

3. 缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。

4. 插件技术:Smarty可以自定义插件。插件实际就是一些自定义的函数。

5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。

不适合使用Smarty的地方

需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,这类型的程序使用smarty会使模板处理速度变慢。

小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用Smarty会在一定程度上丧失PHP开发迅速的优点。

(PS:不过为了整个项目的规范,请大家尝试去使用模板引擎。其实习惯了,开发速度会更加快,以上是没有用习惯模板引擎的开发者遇到的问题) 

smarty引入赋值及标签语法

防止smarty解析css标签

方法1:{literal}{/literal}标签来告诉smarty不用解析照常输出;

方法2:修改smarty左右定界符;

总结:smarty可以赋值字符串,数字等值,也可以赋值给标签一个数组,在模板里解析数组时,用{$标签.key},或者{$标签[index]},当键为字符串时,即关联数组,用$标签.key,当键为数字是,即用索引,用$[index]或$标签.key

smarty模板变量来源详解:

是php中assign分配的变量

smarty的系统保留变量

从配置文件读取到的配置变量

对象的赋值与引用

对象的引用是$标签->属性名,还可以调用对象的方法:$标签->方法名

通过继承来简化模板配置

注意:在MySmarty里不能通过直接重写template_dir和compile_dir属性来实现配置因为这2个属性在父类里是私有的,无法重写,但可以利用开放的接口,setTemplateDir()和setCompileDir()来实现

class MySmarty extends Smarty{
   public function __construct(){
        public::__construct();
        $this -> setTemplateDir('./temp');
        $this -> setCompileDir('./comp');
   }
}

标签的数学运算

标签可以参与运算 但不推荐

模板if else逻辑判断

有时在模板上使用逻辑判断可以极大的程度上简化工作

smarty模板引擎foreach循环实现隔行变色

<table border='0'>
    <tr bgcolor='red'>
        <td>序号</td>
        <td>商品名</td>
        <td>商品价格</td>
        <td>添加时间</td>
    </tr>
    {foreach from=$goods key=k item=g}
    <tr {if [email protected] %2==0}bgcolor='#cfd'{/if}>
        <td>{$g.goods_id}</td>
        <td>{$g.goods_name}</td>
        <td>{$g.shop_price}</td>
        <td>{$g.add_time|date_format:"%Y-%m-%d %H:%m:%S"}</td>
    
    </tr>
    {/foreach}
</table>

smarty缓存设置

缓存就是把 页面内容保存在磁盘上,下次访问相同页面时,直接返回保存的内容,减轻数据库的压力

// 开启缓存
$smarty -> caching = true;
// 设置一个缓存的生命周期
$smarty -> cache_lifetime = 3600;
//设置缓存目录
$smarty -> cache_dir ='./cache';
//判断sm.html运行的内容有没有缓存
if(!$smarty -> isCached('sm.html')){...数据库查询语句...}

smarty局部缓存

在标签中控制,该标签不缓存 {$标签 nocache}

控制一片标签,不缓存{nocache}..代码..{/nocache}

在php中,赋值时就控制不缓存【smarty3新增】$smarty->assign('time',$time, true) //第三个参数为true表示不缓存

单模板多缓存

原理:在生成缓存的时候 可以再传一个缓存id 如果id不同,生成的缓存文件则不同

缓存的删除

$smarty -> clearCache('模板名',id);

smarty模板继承

注意:

子模板第一句,先声继承 extends file='父模板'

子模板的目的,只是填充父模板中预留的block,在block区域之外写的东西

smarty布局和模板包含

被继承模板标签样式:

{block name='main'}{/block}

smarty继承模板标签样式:

{extends file="public/layout.html"}
{block name="main"}
    
     代码区...

{/block}


出处:小张个人博客

网址:http://blog.023xs.cn/

您的支持是对博主最大的鼓励,感谢您的认真阅读。欢迎转载,但请保留该声明。

顶部

Copyright © 小张个人博客 All Rights Reserved 渝ICP备15006773号-1

联系方式:[email protected] | 本站文章仅供学习和参考

渝公网安备 50024102500267号