一、 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. 深度分析如何在Hadoop中控制Map的数量(摘抄)

    很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数决定.在默认情况下,最终input占据了多少block,就应该启动多少个Mapper.如果输入的 ...

  2. Hibernate-ORM:15.Hibernate中的Criteria查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲师Hibernate中的Criteria查询! 一,Criteria简介: 刚接触Hibernate ...

  3. cf987f AND Graph

    #include <iostream> #include <cstdio> using namespace std; int n, uu, m; bool a[4500005] ...

  4. 【多线程】 Task

    [多线程] Task 一. 常用方法: 1. ContinueWith : 当前 Task 完成后, 执行传入的 Task 2. Delay : 创建一个等待的 Task,只有在调用 Wait 方法时 ...

  5. 【廖雪峰老师python教程】——filter/sorted

    filter Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然 ...

  6. Hadoop2.5.2集群部署(完全分布式)

    环境介绍 硬件环境 CPU 4 MEM 4G 磁盘 60G  软件环境 OS:centos6.5版本 64位 Hadoop:hadoop2.5.2 64位 JDK: JDK 1.8.0_91 主机配置 ...

  7. Ubuntu18.04 + CUDA9.0 + cuDNN7.3 + Tensorflow-gpu-1.12 + Jupyter Notebook深度学习环境配置

    目录 一.Ubuntu18.04 LTS系统的安装 1. 安装文件下载 2. 制作U盘安装镜像文件 3. 开始安装 二.设置软件源的国内镜像 1. 设置方法 2.关于ubuntu镜像的小知识 三.Nv ...

  8. LeetCode 2——两数相加

    1. 题目 2. 解答 循环遍历两个链表 若两个链表都非空,将两个链表结点的值和进位相加求出和以及新的进位 若其中一个链表为空,则将另一个链表结点的值和进位相加求出和以及新的进位 然后将每一位的和添加 ...

  9. PHP 用Symfony VarDumper Component 调试

    Symfony VarDumper 类似 php var_dump() 官方文档写的安装方法 : 按照步骤 就可以在 running any PHP code  时候使用了 In order to h ...

  10. winform showDialog() 退出问题

    今日发现: 当返回值为Dialog.OK时,会自动退出,不需要this.close().别的返回值仍需要.