一模板中的注释
每一个Smarty模板文件都是通过Web前台语言(xhtmlcss和javascript等)结合Smarty引擎的语法开发的
用到的web前台开发的语言和原来的完全一样注释也没有变化
Smarty注释语法是左结束符变量值*和*右结束符变量值在这两个定界符之间的内容都是注释内容可以包含一行或多行并且用户浏览网页查看原代码时不会看到注释它只是模板内在的注释以下是注释小例子
$smarty>left_lelimiter = <{;
$smarty>right_delimiter = }>;
注释<{* this a note *}>
代码如下 复制代码
$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 + }> <{* 变量加 *}>
<{$foo * $bar}> <{* 两个变量相乘 *}>
<{$foo>bar $bar[] * $foo>bar * }> <{* 复合类型变量参加运算 *}>
<{if($foo + == )}> <{* 数学运算在程序逻辑中应用 *}>
代码如下 复制代码
<{$foo + }> <{* 变量加 *}>
<{$foo * $bar}> <{* 两个变量相乘 *}>
<{$foo>bar $bar[] * $foo>bar * }> <{* 复合类型变量参加运算 *}>
<{if($foo + == )}> <{* 数学运算在程序逻辑中应用 *}>
在Smarty模板中可以识别嵌入在双引号中的变量但有的变量必须用反引号`(此符号和~在同一个键上)包住如下所示
代码如下 复制代码
<{"test $foo test"}> <{* 双引号中使用变量 *}>
<{"test `$foo[]` test"}> <{* 双引号中反引号包住的数组变量 *}>
<{"test `$foobar` test"}> <{* 双引号中反引号包住的对象成员变量 *}>
<{"test $foo test"}> <{* 双引号中使用变量 *}>
<{"test `$foo[]` test"}> <{* 双引号中反引号包住的数组变量 *}>
<{"test `$foobar` test"}> <{* 双引号中反引号包住的对象成员变量 *}>
第步加载Smarty模板引擎如require libs/Smartyclassphp
第步创建Smarty对象如$smarty = new Smarty();
第步修改Smarty默认行为如开启缓存模板的存放路径等
第步将程序中取得的数据通过Smarty对象的assign()方法赋值给模板中相应的变量
第步用Smarty对象的display()方法将模板内容输出
assign()方法
这个方法用来给模板中的变量赋值使用比较容易
原型void assign(string varnamemixed 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/templatehtml);
简单实例
libs是Smarty类库
tpl/cache_dir存放缓存模板
tpl/compile_dir存放编译后模板文件
tpl/config_dir存放特殊配置文件
tpl/template_dir存放模板文件
smartyphp文件里 new 出了一个 Smarty类对象并设定各对象的属性值如下代码
<?php
require libs/Smartyclassphp;//加载Smartyclassphp文件
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 = ;//启用缓存
$tpl>cache_lifetime = **;//缓存时间天
$tpl>left_delimiter = <{;//左结束符
$tpl>right_delimiter = }>;//右结束符
代码如下 复制代码
<?php
require libs/Smartyclassphp;//加载Smartyclassphp文件
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 = ;//启用缓存
$tpl>cache_lifetime = **;//缓存时间天
$tpl>left_delimiter = <{;//左结束符
$tpl>right_delimiter = }>;//右结束符
indexphp文件 首页代码如下
<?php
require smartyphp;
$tpl>assign(titletitle测试);
$tpl>assign(contentcontent测试);
$tpl>display(templatehtml);
代码如下 复制代码
<?php
require smartyphp;
$tpl>assign(titletitle测试);
$tpl>assign(contentcontent测试);
$tpl>display(templatehtml);
tpl/template_dir/templatehtml 这是一个模板文件 代码如下
<html>
<head>
<meta httpequiv="ContentType" content="text/html; charset=utf" />
<title>
<{$title}>
</title>
</head>
<body>
<{$content}>
</body>
</html>
代码如下 复制代码
<html>
<head>
<meta httpequiv="ContentType" content="text/html; charset=utf" />
<title>
<{$title}>
</title>
</head>
<body>
<{$content}>
</body>
</html>