图3-1 Smarty模板引擎运作示意图
3.2 Smarty配置
安装Smarty非常简单。首先,到www.smarty.net下载最新的稳定版本。将Smarty加压缩到Web文档根目录的某个位置。然后创建存储Smarty模板和配置文件的4个目录。 ? templates 放置所有网站模板。
? configs 放置在特定网站中使用的所有特殊的Smarty配置文件。
? templates_c 放置Smarty编译的所有模板(对于WEB服务器必须是可写的)。 ? cache
在启用缓存特性的情况下,放置smarty缓存的所有模板(对于WEB服务器
必须是可写的)。
在默认情况下,Smarty认为这些目录与实例化Smarty类的脚本位于相同的目录。我们也可以使用Smarty的$temolate_dir、$compile_dir、$configs_dir、$cache_dir修改默认行为。如下图:
图3-2 Smarty配置文件
3.3 使用Smarty
创建index.php文件,先使用require()语句引进刚配置好的Smarty配置文件。下面是
一个简单的实例。代码清单3-2给出了一个简单的设计模板。模板中定义了两个变量:$title
- 7 -
和$content。两个变量都放在大括号中,大括号是Smarty的默认定界符。这些定界符告诉Smarty要对定界符所包围的内容完成某些操做。在这个例子中,唯一的动作就是通过应用程序逻辑(代码清单3-1)传入相应值替代变量。不过,Smarty还能够完成大量的其他任务,例如执行表现逻辑和文本格式等。
require('smarty.php'); $smarty = new Smarty; //分配两个Smarty变量
$smarty->assign('title', \配置测试\$smarty->assign('content', \配置成功\//获取并输出模板
$smarty->display('index.tpl'); ?>
代码清单3-1 模板的应用程序逻辑
{$content}
- 8 -
代码清单3-2简单的Smarty设计模板
Smarty默认模板位于templates目录内,除非通过$template_dir修改了默认模板目
录。
输出的结果如图3-3所示
图3-2 代码清单3-2的输出
3.4 Smarty的表现逻辑 3.4.1 注释
注释包围在定界符 {* 和 *} 之间,可以包括一行或多行,如 {* 注释 *}。
3.4.2 变量修饰符
变量修饰符的语法,如 {$var(变量名)|modifier(修饰符)}。表3-1列出几个比较常用的修饰符。
修饰符 capitalize count_words date_format default
作用 首字母大写 单词计数 格式化日期 赋默认值 - 9 -
例子 {$var|capitalize} {$var|count_words} {$var|date_format:”%B %e, %Y”} {$var|default:”默认的值”}
strip_tags truncate 删除标记标签 截取指定的字符串 {$var|strip_tags} {$var|truncate:10:”…”} 表3-1 Smarty变量修饰符
3.4.3 控制结构
? if函数
与php语言中的if函数相同,下面是一个简单实例: {if $var >5}
变量var大于5
{/if} ? foreach函数foreach 与php中同名结构做法相同。假如 $arr = array(“tom”, “jim”, “mary”),然后我们要遍历输出数组中的每个元素,就如下: {foreach $arr as $name}
$name
{/foreach} ? foreachelse函数
foreachelse的作用是当数组为空时,可以生成某个候选输出,如: {foreach $arr as $name}
$name
空的
{foreachelse} {/foreach} ? section函数
是foreach的一种改进,会循环处理并输出数据数组,但其语法的差别很大。它提供了很多附加选项,可以更好的控制循环的执行,如表3-2。
参数 name
作用 确定节的名,可以任意 - 10 -
loop start step max show 设置循环的次数,应当设置为与数组变量同名 确定开始的位置 确定在数组中移动的步常值 确定循环的最大次数 确定是否显示此节(调试时,可以设置为TRUE) 示例,假如数组$arr = array(“tom”, “jim”, “mary”), 然后我们要遍历输出数组中的每个元素
{section name=person loop=$arr}
{$arr[person]}
{/section} ? sectionelse函数
sectionelse的作用是当数组为空时,可以生成某个候选输出,如: {section name=person loop=$arr}
{$arr[person]}
空的
{sectionelse} {/section}
3.5 Smarty缓存
数据密集型应用程序一般都有很大的开销,通常是数据获取和处理操作带来的。对于
Web应用程序,这个问题是由HTTTP协议的无状态性造成的。由于HTTP协议是无状态的,对于每个页面请求都要重复地执行相同的操作,而不论数据是否已改变。这样Web服务器的运行效率就很低。对此有一种特别有效的解决方案,这也是最合理的方案之一:将动态页面转化为静态页面,只有在页面内容有改变之后才重新构建,或者定期重新构建。Smarty也提供了这样一个特性,一般称为页面缓存(page caching)。 3.5.1 Smarty的缓存配置
require(“Smarty.class.php”); $smarty = new Smarty; $smarty->caching = true; $smarty->cache_lifetime = 60;
?>
- 11 -