本文详细剖析了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中的<"htmlcode">
<{$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类对象,并设定各对象的属性值,如下代码
<"htmlcode"><"htmlcode"><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> <{$title}> </title> </head> <body> <{$content}> </body> </html>