php之Smarty模板使用方法示例详解


Posted in PHP onJuly 08, 2014

本文详细剖析了smarty模板的使用方法,对于学习smarty的朋友有一定的参考价值。详情如下:

一、模板中的注释

每一个Smarty模板文件,都是通过Web前台语言(xhtml,css和javascript等)结合Smarty引擎的语法开发的。
用到的web前台开发的语言和原来的完全一样,注释也没有变化。
Smarty注释语法是'左结束符变量值*'和'*右结束符变量值',在这两个定界符之间的内容都是注释内容,可以包含一行或多行,并且用户浏览网页查看原代码时不会看到注释,它只是模板内在的注释,以下是注释的例子。

$smarty->left_lelimiter = '<{';
$smarty->right_delimiter = '}>';

注释:

<{* this a note *}>

二、模板中变量声明

在Smarty中一切以变量为主,所有的呈现逻辑都让模板自行控制。有几种不同类型的变量,变量的类型取决于它的前缀是什么符号或者被什么符号包围。变量可以直接被输出或者作业函数属性和修饰符的参数或者用于内部的条件表达式等

<{$name}> <{*常规类型变量,需要调用模板内的assign函数分配值*}>
<{$contacts[row].phone}> <{*数组类型变量,需要调用模板内的assign函数分配值*}>
<body bgcolor="<{#bgcolor#}>"> <{*从配置文件中读取的变量的值并输出*}>

如果在Smarty模板中输出从php中分配的变量,需要在变量前面加$符号并用定界符将它括起来,命名方式和php的变量命名方式一样,并且定界标示符号又有点像是php中的<?php ?>(事实上它们确实会被替换成这个)

三、模板中输出从php分配的变量

在Smarty模板中经常使用的变量有两种:一是从php中分配的变量;另一种是从配置文件中读取的变量
注意:模板中只能输出从php中分配的变量,不能在模板中为这些变量重新赋值,变量都是全域的,只要分配一次就可以了,如果分配两次以上的话,变量内容会以最后分配的为主
Smarty中提供的foreach或section语句用于遍历输出数组中的每个元素,索引数组和关联数组在模板中输出的方式略有不同,索引数组在模板中的访问方式和在php脚本中的引用是一样的,关联数组中元素在模板中指定的方式是使用'.'访问的。
在模板中访问对象和php脚本中的方式一样,都是通过'->'这个运算符完成的。

四、Smarty 模板中变量的数学计算

在模板中变量不能直接赋值,但可以参与数学运算,只要在php脚本中可以执行的数学运算都可以在模板中应用,如下所示:

<{$foo + 1}> <{* 变量加1 *}>
<{$foo * $bar}> <{* 两个变量相乘 *}>
<{$foo->bar - $bar[1] * $foo->bar - 3 * 7}> <{* 复合类型变量参加运算 *}>
<{if($foo + 2 == 10)}> <{* 数学运算在程序逻辑中应用 *}>

在Smarty模板中可以识别嵌入在双引号中的变量,但有的变量必须用反引号'`'(此符号和'~'在同一个键上)包住,如下所示:

<{"test $foo test"}> <{* 双引号中使用变量 *}>
<{"test `$foo[0]` test"}> <{* 双引号中反引号包住的数组变量 *}>
<{"test `$foo.bar` test"}> <{* 双引号中反引号包住的对象成员变量 *}>

五、smarty模板使用示例

第1步:加载Smarty模板引擎,如:require 'libs/Smarty.class.php'
第2步:创建Smarty对象,如:$smarty = new Smarty();
第3步:修改Smarty默认行为,如:开启缓存、模板的存放路径等
第4步:将程序中取得的数据通过Smarty对象的assign()方法赋值给模板中相应的变量
第5步:用Smarty对象的display()方法将模板内容输出

assign()方法:

这个方法用来给模板中的变量赋值,使用比较容易
原型:void assign(string varname,mixed var)
这个方法可以将php所支持的类型数据赋值给模板变量包含数组和对象
使用方式有如下两种:

//指定一对'名称/数值'
$smarty->assign('question','你好吗');
$smarty->assign('answer','不怎么好');
//指定包含'名称/数值'
$smarty->assign(array('question' => '你好吗','answer' => '不怎么好'));//这种方式比较少用

display()方法:

基于Smarty的脚本中必须用到这个方法,而且一个脚本中只能使用一次,它负责获取和显示由Smarty引擎引用的模板
原型:var display(string template[,string cache_id][,string compile_id])
参数一:template是必选的,指定一个合法的模板资源的类型和路径
参数二:cache_id指定一个缓存标识符的名称
参数三:compile_id在维护一个页面多个缓存时使用
使用方法如下
$smarty->display('tpl/template_dir/template.html');

简单实例:

1、libs:是Smarty类库
2、tpl/cache_dir:存放缓存模板
3、tpl/compile_dir:存放编译后模板文件
4、tpl/config_dir:存放特殊配置文件
5、tpl/template_dir:存放模板文件
6、smarty.php文件里 new 出了一个 Smarty类对象,并设定各对象的属性值,如下代码

<?php
require 'libs/Smarty.class.php';//加载Smarty.class.php文件        
define('SITE_ROOT','./tpl/');//定义一个常量
$tpl = new Smarty();
$tpl->template_dir = SITE_ROOT . 'template_dir';//存模板文件  
$tpl->compile_dir = SITE_ROOT . 'compile_dir';//存编译过的模板文件
$tpl->config_dir = SITE_ROOT . 'config_dir';//存特殊配置文件
$tpl->cache_dir = SITE_ROOT . 'cache_dir';//存Smarty缓存文件  
$tpl->caching = 1;//启用缓存
$tpl->cache_lifetime = 60*60*24;//缓存时间1天  
$tpl->left_delimiter = '<{';//左结束符
$tpl->right_delimiter = '}>';//右结束符

7、index.php文件 首页代码如下

<?php      
 require 'smarty.php';
 $tpl->assign('title','title测试');
 $tpl->assign('content','content测试');
 $tpl->display('template.html');

8、tpl/template_dir/template.html 这是一个模板文件 代码如下

<html>        
 <head>        
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>
   <{$title}>
 </title>
 </head>
 <body>
 <{$content}>
 </body>
</html>
PHP 相关文章推荐
PHP分页详细讲解(有实例)
Oct 30 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
Apr 10 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
PHP集成百度Ueditor 1.4.3
Nov 23 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 PHP
PHP PDOStatement::fetchObject讲解
Feb 01 PHP
通过PHP设置BugFree获取邮箱通知
Apr 25 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 #PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 #PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 #PHP
PHP的error_reporting错误级别变量对照表
Jul 08 #PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 #PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 #PHP
PHP生成短网址的3种方法代码实例
Jul 08 #PHP
You might like
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
python如何定义带参数的装饰器
2018/03/20 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Python yield的用法实例分析
2020/03/06 Python
python3中数组逆序输出方法
2020/12/01 Python
python 自动识别并连接串口的实现
2021/01/19 Python
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
学校后勤人员职责
2013/12/27 职场文书
小学生期末自我鉴定
2014/01/19 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
借款协议书
2014/04/12 职场文书
文明寝室申报材料
2014/05/12 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
2014年英语工作总结
2014/12/20 职场文书
前台岗位职责范本
2015/04/16 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书