Smarty模板进阶教程(一)

By | 2011 年 12 月 31 日

Smarty模板进阶教程(一)

在上一篇教程中,我们接触的第一个例子就是简单变量,通过在模板文件的相应位置放置形如{$varname}的变量,然后由php脚本来$smarty->assign('varname','hello world'); 即可为模板中的变量赋予相应值并最终显示。

但是仅仅简单地赋值就太小儿科了,这次我们来看一下Smarty中的变量调节器,它可以作用于变量,自定义函数和字符串。使用时跟随在变量等的后面,用‘|’符号和调节器名称来应用调节器。变量调节器由赋予的参数值决定其行为。多个参数由‘:’符号分开。基本形式如下:
{$topic|truncate:40:"..."}
{"now"|date_format:"%Y/%m/%d"}

如果你给数组变量应用单值变量的调节,结果是数组的每个值都被调节。如果你只想要调节器用一个值调节整个数组,你必须在调节器名字前加上@符号。例如: {$articleTitle|@count}(这将会在 $articleTitle 数组里输出元素的数目)

下面我们用一个例子来看几个调节器的用法

<html>
<head><title>smarty的模板调节器示例</title></head>
<body>
1. 第一句首字母要大写:{$str1|capitalize}<br>
2. 第二句模板变量 + 张瑜:{$str2|cat:张瑜"}<br>
3. 第三句输出当前日期:{$str3|date_format:"%Y年%m月%d日"}<br>
4. 第四句.php程序中不处理,它显示默认值:{$str4|default:"没有值!"}<br>
5. 第五句要让它缩进8个空白字母位,并使用"*"取替这8个空白字符:<br>{$str5|indent:8:"*"}}<br>
6. 第六句把JaDDy@oNCePlAY.CoM全部变为小写:{$str6|lower}<br>
7. 第七句把变量中的teacherzhang替换成:张瑜:{$str7|replace:"teacherzhang":"张瑜"}<br>
8. 第八句为组合使用变量修改器:{$str8|capitalize|cat:"这里是新加的时间:"|date_format:"%Y年%m月%d日"|lower}
</body>
</html>

第二步是设计php脚本:

<?php
require_once ("./lib/smarty/Smarty.class.php"); //包含smarty类文件
$smarty = new Smarty(); //建立smarty实例对象$smarty
$smarty->template_dir = "./templates";//设置模板目录
$smarty->compile_dir = "./templates_c"; //设置编译目录

//----------------------------------------------------
//左右边界符,默认为{},但实际应用当中容易与JavaScript
//相冲突,所以建议设成<{}>或其它。
//----------------------------------------------------
$smarty->left_delimiter = "{"; 
$smarty->right_delimiter = "}";

$smarty->assign("str1", "my name is zhangyu."); //将str1替换成My Name Is Zhangyu.
$smarty->assign("str2", "我的名字叫:"); //输出: 我的名字叫:张瑜
$smarty->assign("str3", "公元"); //输出公元2004年8月21日(我的当前时间)
//$smarty->assign("str4", ""); //第四句不处理时会显示默认值,如果使用前面这一句则替换为""
$smarty->assign("str5", "前边8个*"); //第五句输出:********前边8个*
$smarty->assign("str6", "JaDDy@oNCePlAY.CoM"); //这里将输出jaddy@onceplay.com
$smarty->assign("str7", "this is teacherzhang"); //在模板中显示为:this is 张瑜
$smarty->assign("str8", "HERE IS COMBINING:");

//编译并显示位于./templates下的index.html模板
$smarty->display("index.html"); 
?>

最终输出效果:

<html>
<head><title>smarty的模板调节器示例</title></head>
<body>
1. 第一句首字母要大写:My Name Is Zhangyu.<br>
2. 第二句模板变量 + 张瑜:我的名字叫:张瑜<br>
3. 第三句输出当前日期:公元2004年8月21日<br>
4. 第四句.php程序中不处理,它显示默认值:没有值!<br>
5。第五句要让它缩进8个空白字母位,并使用"*"取替这8个空白字符:<br>********前边8个*<br>
6. 第六句把JaDDy@oNCePlAY.CoM全部变为小写:jaddy@onceplay.com<br>
7. 第七句把变量中的teacherzhang替换成:张瑜:this is 张瑜<br>
8. 第八句为组合使用变量修改器:Here is Combining:这里是新加的时间:2004年8月21日
</body>
</html>

下面是一些变量调节器的列表,具体使用大家可以查阅Smarty手册。

capitalize 首字大写
count_characters 计算变量里的字符数
cat 将cat里的值连接到给定的变量后面
count_paragraphs 计算变量里的段落数量
count_sentences 计算变量里句子的数量
count_words 计算变量里的词数
date_format 格式化日期
default 默认值
escape 用于html转码,url转码
indent 缩进
lower 将变量字符串小写
nl2br 所有的换行符将被替换成 <br />
regex_replace 寻找和替换正则表达式
replace 简单的搜索和替换字符串
spacify 在字符串的每个字符之间插入空格或者其他的字符(串)
string_format 字符串格式化
strip 用一个空格或一个给定字符替换所有重复空格,换行和制表符
strip_tags 去除<和>标签,包括在<和>之间的任何内容
truncate 从字符串开始处截取某长度的字符.默认是80个
upper 将变量改为大写
wordwrap 可以指定段落的宽度(也就是多少个字符一行,超过这个字符数换行)。默认80

另外大家也可以查看smarty/plugins目录中以modifier开头的文件,它们其实就是这些变量调节器的源代码。

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据