1. 变量调解器的使用方式
变量如果在模版中输出以前需要调解,可以在变量后面跟一个竖线“|”,在后面使用调解的命令(函数插件).而且对于同一变量,可以通过”|”来分隔使用多个调解器。
{$var|modifier:"args1":"args2":···}{*使用modifier调解器及参数*}
{$var|modifier1|modifier2|modifier3|···}{*使用多个变量调解器*}
{$topic|truncate:40:"..."}{*截取变量值的字符串长度为40,并在结尾使用"..."表示省略*}
truncate函数默认截取字符串的长度为80个字符,但可以通过提供的第一个可选参数来改变截取的长度。如上例中截取的长度为40个字符。在Smarty2中只按ASCII码进行截取,并没有考虑双字节和多字节的字符集问题。所以截取中文会出现乱码。但在smarty3中弥补了这个问题,可以正常截取中文字符。
2. Smarty默认提供的变量调解器
成员方法名 | 描述 |
---|---|
capitalize | 将变量里的所有单词首字母大写,参数值boolean型决定带数字的单词是否首字母大写,默认不大写 |
count_characters | 计算变量值里的字符个数,参数值boolean型决定是否计算空格数,默认不计算空格 |
cat | 将cat里的参数值连接到给定的变量后面,默认为空 |
count_paragraphs | 计算变量里的段落数量 |
count_sentences | 计算变量句子里的数量 |
count_words | 计算变量里的次数 |
date_format | 日期格式化,第一个参数控制日期格式,如果传给date_format的数据是空的,将使用第二个参数作为默认时间 |
default | 为空变量设置一个默认值,当变量为空或者未分配时,由给定的默认值替代输出 |
escape | 由html转码,url转码,在没有转码的变量上转换但一号,十六进制转码,十六进制梅花,或者JavaScript转码,默认html转码 |
indent | 在每行缩进字符串,第一个参数指定缩进多少个字符,默认是四个字符;第二个参数,指定缩进用什么字符代替 |
Lower | 将变量字符串小写 |
nl2br | 所有的换行符将被替换成<br/>.功能同PHP中的nl2br函数一样 |
Regex_replace | 寻找和替换正则表达式,必须有两个参数,参数1是替换正则表达式,参数2使用什么文本字符串替换 |
replace | 简单的搜索和替换字符串,必须有两个参数,参数1是将被替换的字符串,参数2是用来替换的文本 |
spacify | 在字符串的每个字符之间插入空格或者其他字符串。参数表示将在两个字符之间插入的字符串,默认为一个空格 |
String_format | 是一种格式化浮点数的方法,如十进制数,使用sprintf语法格式化。参数是必须的,规定使用的格式化方式。%d表示显示整数,%.2f表示截取两个浮点数。用法同PHP函数printf_r一样 |
Strip | 替换所有重复的空格,换行和tab为单个或者指定的字符串。如果有参数则是指定的字符串 |
strip_tags | 去除所有html标签 |
truncate | 从字符串开始处截取某长度的字符,默认为80个 |
upper | 将变量改为大写 |
wordwrap | 可以指定段落的宽度(也就是多少个字符一行,超过这个字符数换行),默认80.第二个参数可选,可以指定在约束点使用什么字符(默认是换行符\n).默认情况下smarty将截取到词尾,如果想精确到指定长度的字符,请将第三个参数设置为ture |
3. 部分实例
testSmarty2.php和对应的模版文件testSmarty2.html
<?php
/**
* Description: 变量调节器示例
* Version: 1.1
* Author: Chang <chriszchang@163.com>
* Date: 2016/03/25
* Time: 15:00
*/
require_once '../Smarty/Smarty.class.php';
$smarty = new Smarty;
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
$smarty->assign('str1',"hello world2 how are you!");
$smarty->assign('str2',"hello world2. \n \n how are you!");
$smarty->assign('str3',"<a href='ww.baidu.com'>百度</a>");
$smarty->assign('articleTitle',
'NJ judge to rule on nude beach.
Sun or rain expected today, dark tonight.
Statistics show that teen pregnancy drops off significantly after 25.'
);
$smarty->assign('nums',1234.7784);
$smarty->assign('yesterday',strtotime('-1 day'));
$smarty->display('testSmarty2.html');
<html>
<head>
<title>smarty中的变量调节器</title>
</head>
<body>
<h1>$str1</h1>
<{$str1}>
<h1>首字母大写</h1>
<{$str1|capitalize}>
<h1>首字母大写带数字的单词也需要大写</h1>
<{$str1|capitalize:true}>
<h2>连接字符串</h2>
<{$str1|cat:" I am fine"}>
<h2>字符计数</h2>
<{$str1|count_characters}>
<{$str1|count_characters:true}>
<h2>计算段落</h2>
<{$str2}>
<{$str2|count_paragraphs}>
<{$str2|count_paragraphs:true}>
<h2>计算句数</h2>
<{$str2|count_sentences}>
<h2>计算词数</h2>
<{$str2|count_words}>
<h2>格式化日期</h2>
<{$smarty.now|date_format}>||
<{$smarty.now|date_format:"%D"}>||
<{$yesterday|date_format:"%Y-%m-%d %H:%M:%S"}>
<h2>默认值</h2>
<{$smart|default:"没有smart这个变量"}>
<h2>escape</h2>
<{$str3}>
<{$str3|escape}>
<h2>缩进</h2>
<{$articleTitle}>
<{$articleTitle|indent}>
<{$articleTitle|indent:10}>
<{$articleTitle|indent:1:"\t"}>
<h2>小写</h2>
<{$str2|lower}>
<h2>nl2br</h2>
<{$str2|nl2br}>
<h2>正则替换</h2>
<{$str2}>
<{$str2|regex_replace:"/[0-9]/":" This is a number"}>
<h2>字符串替换</h2>
<{$str2}>
<{$str2|replace:'world':'human'}>
<h2>插空</h2>
<{$str2|spacify:"^_^"}>
<h2>字符串格式化</h2>
<{$nums}>
<{$nums|string_format:"%.2f"}>
<h2>去除多余空格</h2>
<{$str2}>
<{$str2|strip}>
<{$str2|strip:' '}>
<h2>去除html标签</h2>
<{$str3}>
<{$str3|strip_tags}>
<h2>截取</h2>
<{$articleTitle}><br/>
<{$articleTitle|truncate}><br/>
<{$articleTitle|truncate:30}><br/>
<{$articleTitle|truncate:30:""}><br/>
<{$articleTitle|truncate:30:"---"}><br/>
<{$articleTitle|truncate:30:"":true}><br/>
<{$articleTitle|truncate:30:"...":true}><br/>
<{$articleTitle|truncate:30:"..":true:true}><br/>
<h2>大写</h2>
<{$str2|upper}>
<h2>行宽约束</h2>
<{$str2}><br/>
<{$str2|wordwrap}><br/>
<{$str2|wordwrap:8}><br/>
<{$str2|wordwrap:8:"<br/>"}><br/>
<{$str2|wordwrap:8:"<br/>":true}><br/>
<h2>组合修改器</h2>
<{$articleTitle}><br/>
<{$articleTitle|lower|spacify|truncate:20:". . ."}>
</body>
</html>
</body>
</html>