一、 smarty的特点

速度:相对于其他模板引擎,速度较快

编译型:在下次访问模板时直接访问编译文件,不再进行模板重新编译

缓存技术:可以将用户最终看到的HTML文件缓存成一个静态HTML

插件技术:smarty可以自定义插件,插件其实是一些自定义函数

强大的表现逻辑:模板中可以使用if/else if/end if/foreach等

二、 smarty的基本使用

1index.php页面输入如下

<?php

//1.引入smarty类

include 'smarty/libs/Smarty.class.php';

//2.实例化smarty对象

$smarty = new Smarty();

//3.设置相关属性

$smarty->template_dir = "templates";    //模板目录

$smarty->compile_dir = "templates_c";   //编译目录

//修改定界符

$smarty->left_delimiter = '<{';

$smarty->right_delimiter = '}>';

//4.分配数据

$smarty->assign("title", "smarty模板引擎");

$smarty->assign("content", "smarty模板引擎的hello world");

//5.载入视图

$smarty->display('index.html');

2)在视图页面index.html输入如下

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>{$title}</title>

</head>

<body>

<h2>{$title}</h2>

<p>{$content}</p>

</body>

</html>

二、 smarty的基本语法

1)定界符

smarty中默认的定界符是{ }

① 任何在定界符之外的内容都是静态的,不会被解析(包括php代码)

② 定界符开始的”{”符号和变量$之前不能有空格,例如{ $title}不会被解析

③ 页面中的css或者js的{ }也会被认为是定界符,发生冲突,处理方式如下:

a ) 可以在{开头的地方加上空格

b ) css和js以外部引入的方式添加

c ) 使用内置函数{literal}  {需要解析的css或js}  {/literal}

④ 修改定界符,在smarty配置的php页面中输入如下代码:

$smarty->left_delimiter = '<{';

$smarty->right_delimiter = '}>';

2)注释

在index.html视图页面中使用<*注释内容*>来书写smarty的注释

3)变量

Smarty中的变量来源主要有以下三种:

① 通过PHP程序中的assign函数分配

② 保留变量

③ 配置变量

①  assign变量

php中的8种数据类型:

422阵容

4:四种标量类型;整型、浮点型、字符串、布尔型

2:两种复合类型;数组、对象

2:两种特殊类型,资源和null

分配assign变量:

$user=array(“tom”,”jim”,”jack”);

$smarty->assign(‘user’,$user);

在视图页面中输入{$user[0]},或者点语法{$user.0}可得到相应的值此处为tom

②  保留变量

无需在php中分配,直接可以在模板页面中使用的变量。包括php中的超级全局变量,比如:$_GET,$_SERVER,以及smarty自带的一些变量

使用格式:{$smarty.保留变量名}

示例:{$smarty.server.SERVER_NAME}

 配置变量

无需在php程序中分配,但不同于保留变量,它是通过配置文件配置的

示例如下:创建配置文件config.conf,输入如下内容 ,配置文件必须创建在文件夹名configs的文件夹中

copyright="版权信息"   //配置文件中的双引号可以去除

police=备案信息

[nationnality]

name=nationnality

[time]

name=time

php页面调用smarty引擎

<?php

//1.引入smarty类

include 'smarty/libs/Smarty.class.php';

//2.实例化smarty对象

$smarty = new Smarty();

//3.设置相关属性

$smarty->template_dir = "templates";

$smarty->compile_dir = "templates_c";

$smarty->display('config.html');

调用配置信息:

在视图页面中输入如下内容即可调用配置信息

{config_load file="test.conf" section="time"}  //引用配置文件,并注明使用time这个部分

<h2>{#copyright#}</h2>

<h2>{$smarty.config.police}</h2>

<h2>{#name#}</h2>

//因为配置文件中有两个name,加载文件已指明为time部分,所以此处输出time

4)函数(smarty中函数主要分为三类)

①  内置函数

1. {if} {elseif} {else}

每一个{if}必须有配对的关闭标签:{/if}

内置函数使用示例:在视图页面中输入如下

{if $iq >= 130}

Tom

{elseif $iq <130 && $iq>=110}

Jack

{elseif $iq<110 && $iq>=90}

Lucy

{else}

Jim

{/if}  //配对的关闭标签

2. {foreach}

使用foreach循环输出二维数组示例如下:

{foreach}的属性,主要有下述6个:

a ) @index ,当前数组索引,从0开始计算

b ) @iteration,当前循环的次数,从1开始计算

c ) @first ,首次循环时,该值为true

d ) @last ,循环到最后一次时,该值为true

e ) @total ,总的循环次数,可在foreach内部使用,也可以在循环完成之后使用

f ) @show ,在foreach循环执行完之后,检测循环是否显示数据的判断

使用方法示例如下:以@first为例,给第一个tr添加类名

3. {section}

使用section循环时,注意,section不能用于关联数组,只能用于连续下标的数组(0,1,2,…),对关联数组使用循环,需要使用{foreach}

相关参数如下:

使用方式示例:在视图页面中输入如下

{section
name=”item” start=0}  表示从第0项开始循环

<li>{$user[item]}</li>   //此处的$user是一个索引数组

{/section}

使用indexfirst等属性:

使用section可以在一次循环中遍历多个数组:

 变量修饰器

通常情况,在模板页面中,直接输出php程序中分配过来的变量即可,但也有一些特殊情况,需要对分配过来的变量/保留变量,进行再次处理,smarty提供了变量修饰器

使用示例如下:

{$smarty.now|date_format:"%Y-%m-%d %T"}  //使用了smarty的时间修饰器

{$content|truncate:10}  
//使用限制字符长度的修饰器

{"hello"|str_repeat:10}  
//重复输出hello10次

……

 函数插件(自定义函数)

(1)html_radios

{html_radios
name=”names” values=$value output=$outlabs selected=”2”}

视图页面中调用这段代码,相当于创建了对应的<input type=”radio”>提示信息

此处的output就是input的外部的提示信息

Selected=2表示第2个数值被选中

(2)html_checkbox  //使用方法与html_radios基本相同

{html_checkbox
name=”names” values=$value output=$outlabs selected=”Tom”}

如果要设置默认选中多个选项,以数组的形式设置selected的值即可

(3) html_options (下拉列表)

{html_options
name=”names” options=$array selected=3}

不需要设置在select下,option赋值一个关联数组即可,value就是数组的key

(4) cycle (交替循环值)

视图页面示例: //输出隔行添加的class

<tr class=”{cycle
values=’one,two,three’}”>

<td>{$v.id}</td>

<td>{$v.name}</td>

<td>{$v.age}</td>

</tr>

三、 smarty在项目中的引用

1)引入smarty

放在framework中,意味着smarty是框架的一部分

        放在application中,是以第三方的方式引入smarty,(third_party)

2)配置smarty

        此处以第三方引入方式为例:

        在application>controllers>home>indexControler.class,php文件中

public
function indexAction(){

//引入smarty类

Include
APP_PATH.”third_party/smarty/smarty.class.php”

//实例化smarty对象

$smarty
= new Smarty();

//设置相关属性

$smarty
-> template_dir = CUR_VIEW_PATH . “templates”;

$smarty
-> compile_dir = CUR_VIEW_PATH . “templates_c”;

//分配数据

$smarty
-> assign(‘cats’,$cats);

$smarty
-> assign(‘bestGoods’,$bestGoods);

//载入模板文件

$smarty
-> display(‘index.html’);

}

3)配置smarty优化BaseController.class.php

可以将上述(2)中的代码写到基础控制类中,再让其他控制器继承自基础控制价,这样可以实现重复利用

4)模板包含

可以将头部html页面提取出来,再引用include内置函数方法将提出的head.html页面注入其他页面中,{include
file = “head.html”}

四、 smarty的缓存

1)缓存的基础使用

主要的缓存方法分为:数据缓存和文件缓存

smarty的缓存属于文件缓存:生成静态页面

smarty设置缓存:

//开启缓存

$smarty->caching=true;

//设置缓存目录 (需要创建响应的文件夹)

$smarty->cache_dir=CUR_VIEW_PATH.”cache”

//设置缓存有效期

$this->smarty->cache_lifetime=60;   (默认有效期为3600,单位秒)

//开启smarty调用模式

$smarty->debugging=true;  (可以开启调试页面)

//当前页面是首页

$smarty->assign(‘index’,true);

Smarty提供的判断方法,判断是否缓存:isCached

使用示例如下:

if(!$smarty->isCached(‘index.html’)){  //表明没有缓存

                 执行代码

}

2)局部不缓存

标签的缓存控制nocache属性)

显示时间:{$smarty.now|date_format:’%Y-%m-%d
%T’} 有缓存刷新时间不变

显示时间:{$smarty.now|date_format:’%Y-%m-%d
%T’ nocache}
去除缓存

变量的缓存控制(适用于单个变量,分配时第三个参数设为true

声明变量:$time=date(“Y-m-d H:i:s”);

$smarty->assign(“time1”,$time);

$smarty->assign(“time1”,$time,true);  //声明第三参数为true,该变量不缓存

模板区域的缓存控制{nocache} {/nocache} 适用于一块区域)

在视图页面使用{nocache}内置函数,去除缓存,示例如下:

{nocache}

<h3>{$smarty.now|date_format:’%Y-%m-%d
%T’}</h3>  //该内容不会缓存

{/nocache}

3)单模板多缓存(同一个页面生成多个缓存文件)

只需要在载入模板文件时,输入区分的参数即可(url中传递的参数)

$smarty->display(‘goods.html’,$goods_id);

同理判断缓存的时候也需要输入这个参数:

$smarty->isCached(‘goods.html’,$goods_id)

4)缓存组

设置缓存组:

$smarty->display(“list.html”,”$size|$brand|$style|$material”)

5)删除缓存

缓存失效情况:超过有效期、模板页面发生变化、删除缓存文件

//删除首页缓存

$smarty->clearCache(“index.html”);

//删除页面指定参数缓存

$smarty->clearCache(“goods.html”,2);

//删除所有缓存

$smarty->clearAllCache();

删除文件使用的底层方法是unlink()函数

php模板引擎smarty的更多相关文章

  1. PHP的模板引擎smarty原理是什么(整理)

    PHP的模板引擎smarty原理是什么(整理) 一.总结 一句话总结:其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者混合为一个ph ...

  2. PHP模板引擎Smarty内建函数section,sectionelse用法详解

    本文实例讲述了PHP模板引擎Smarty内建函数section,sectionelse用法.分享给大家供大家参考,具体如下: section 是 Smarty 模板中除了 foreach 以外的另一种 ...

  3. Php模板引擎Smarty安装和配置

    Smarty 是PHP的一个模板引擎,是由Monte Ohrt 和 Andrei Zmievski 使用PHP语言开发的,发展至今已成为一个非常流行的模板引擎,Smarty 提供了一种易于管理和使用的 ...

  4. php模板原理PHP模板引擎smarty模板原理浅谈

    mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...

  5. PHP的模板引擎smarty原理浅谈

    mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...

  6. Smarty模板引擎技术

    Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...

  7. 推荐13款javascript模板引擎

    javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于j ...

  8. js模板引擎介绍搜集

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

  9. php的模板引擎

    设计一个交互式的网站,我们需要关注两个主要的问题:分别是图形用户界面和业务逻辑.例如,一个标准的web开发小组由两三个美工和三个程序员组成,则设计流程是:美工设计者制作了项目的网站的界面模板,然后把它 ...

随机推荐

  1. 在Android studio中用gradle打 jar 包(Mac下)

    这两天公司要重构项目,以前的项目在eclipse上,准备迁移到Android studio上,需要对项目打包,于是我学习了Android studio中gradle打包的内容.我在公司用的Mac,在家 ...

  2. 《剑指offer》题解

    有段时间准备找工作,囫囵吞枣地做了<剑指offer>提供的编程习题,下面是题解收集. 当初没写目录真是个坏习惯(-_-)||,自己写的东西都要到处找. 提交的源码可以在此repo中找到:h ...

  3. SGU 101 Domino 题解

    鉴于SGU题目难度较大,AC后便给出算法并发布博文,代码则写得较满意后再补上.——icedream61 题目简述:暂略 AC人数:3609(2015年7月20日) 算法: 这题就是一笔画,最多只有7个 ...

  4. LaTeX工具——mathpix安利

    官网: https://mathpix.com/ 效果看下图: 图片打不开点这里 识别效果还行,感觉很适合jbc/zcy这种不喜欢打LaTex公式的神仙.

  5. Google序列化库FlatBuffers 1.1发布,及与protobuf的比较

    个人总结: FlatBuffer相对于Protobuffer来讲,优势如下: 1. 由于省去了编解码的过程,所以从速度上快于Protobuffer,个人测试结果100w次编解码,编码上FlatBuff ...

  6. 虚拟现实-VR-UE4-认识UE4

    VR的火热,让每个人都想参与一下, 公司在展会上面搞了一个VR的Demo,关注度超出预期,使得公司高层决定来个VR项目 所以 关于UE4 百度百科地址:http://baike.baidu.com/l ...

  7. Mysql性能优化三:主从配置,读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  8. Week7 Teamework from Z.XML-NABC

    NABC 引言:我们团队计划做一个手机端的类RPG2d游戏.之所以我们定义为类RPG,是因为我们希望弱化RPG在游戏中的概念--减少或者排除人物对话等较为无趣的内容,而将重点放在玩家的娱乐享受中.为了 ...

  9. 安装floodlight遇到的问题和解决

    环境:ubuntu18.04 安装floodlight先前准备:java的环境,ant. sudo apt-get install build-essential defailt-jdk ant py ...

  10. STL 六大部件

    stl具有上面6大部件 容器是存储数据的,原理主要是模板,容器只是负责存储数据,并不关心内存的存储情况,所以出现了分配器,分配器主要是负责为容器分配内存的,对于数据的操作被封装为一个个函数,也就是算法 ...