php模板引擎smarty
一、 smarty的特点
速度:相对于其他模板引擎,速度较快
编译型:在下次访问模板时直接访问编译文件,不再进行模板重新编译
缓存技术:可以将用户最终看到的HTML文件缓存成一个静态HTML
插件技术:smarty可以自定义插件,插件其实是一些自定义函数
强大的表现逻辑:模板中可以使用if/else if/end if/foreach等
二、 smarty的基本使用
(1)index.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}
使用index、first等属性:
使用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的更多相关文章
- PHP的模板引擎smarty原理是什么(整理)
PHP的模板引擎smarty原理是什么(整理) 一.总结 一句话总结:其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者混合为一个ph ...
- PHP模板引擎Smarty内建函数section,sectionelse用法详解
本文实例讲述了PHP模板引擎Smarty内建函数section,sectionelse用法.分享给大家供大家参考,具体如下: section 是 Smarty 模板中除了 foreach 以外的另一种 ...
- Php模板引擎Smarty安装和配置
Smarty 是PHP的一个模板引擎,是由Monte Ohrt 和 Andrei Zmievski 使用PHP语言开发的,发展至今已成为一个非常流行的模板引擎,Smarty 提供了一种易于管理和使用的 ...
- php模板原理PHP模板引擎smarty模板原理浅谈
mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...
- PHP的模板引擎smarty原理浅谈
mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...
- Smarty模板引擎技术
Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...
- 推荐13款javascript模板引擎
javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于j ...
- js模板引擎介绍搜集
js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...
- php的模板引擎
设计一个交互式的网站,我们需要关注两个主要的问题:分别是图形用户界面和业务逻辑.例如,一个标准的web开发小组由两三个美工和三个程序员组成,则设计流程是:美工设计者制作了项目的网站的界面模板,然后把它 ...
随机推荐
- 初步学习pg_control文件之九
接前文,初步学习pg_control文件之八 来看这个: pg_time_t time; /* time stamp of last pg_control update */ 当初初始化的时候,是这样 ...
- 算法-----数组------ 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 ...
- Jexus支持HTTPS协议
众所周知,在HTTPS页面请求HTTP资料的时候,现代浏览器会拦截,提示用户是否继续,或者直接拦截,提示都不出来. 最近给自己做了个快速书签工具,点击书签就直接把书签发送到服务器地址,然后保存到我的网 ...
- PRO*C 函数事例 1 -- 数据库连接、事务处理
1.程序结构 每一个Pro*C程序都包括两部分:(1)应用程序首部:(2)应用程序体 应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做 ...
- luogu4172 [WC2006]水管局长
就是用 lct 维护最小生成树 ref #include <algorithm> #include <iostream> #include <cstdio> #in ...
- android activity状态保存
一.被其他任务打断(来电话),再次打开希望保留数据 private String SAVE_INSTANCE_TAG = "ATWAL"; @Override protected ...
- Bugku 速度要快
import requests import base64 url="http://123.206.87.240:8002/web6/" res=requests.get(url) ...
- [OpenCV]DMatch类和KeyPoints类:特征点匹配
DMatch struct CV_EXPORTS_W_SIMPLE DMatch { CV_WRAP DMatch() : queryIdx(-), trainIdx(-), imgIdx(-), d ...
- GraphSAGE 代码解析(三) - aggregators.py
原创文章-转载请注明出处哦.其他部分内容参见以下链接- GraphSAGE 代码解析(一) - unsupervised_train.py GraphSAGE 代码解析(二) - layers.py ...
- 解决EasyUI DataGrid删除行失败的方法
笔者最近在做一个项目的后台,用到了EasyUI的datagrid控件,并开启了行内编辑功能,实际上也就是使用了edatagird这个空间,引用了edatagrid.js,一切似乎都做的顺风顺水,添加数 ...