之前学习了Smarty的基本用法和基本的变量传递。
接下来学习一下Smarty的变量调节器。
变量调节器就是将变量调整成自己需要的形式。
这里的变量可以是字符串、变量和自建函数。
基本形式
变量调节器的一般形式为:
{$yesterday|date_format:"%A, %B %e, %Y"}
{变量|调节器名:参数1:参数2}
前边视要调节的变量,“|”后接着调节器名,后边为参数,参数使用“:”分割。
参数部分视具体情况而定。
组合调节器
对于同一个变量,可以使用多个修改器。它们将从左到右按照设定好的顺序被依次组合使用。使用时必须要用”|”字符作为它们之间的分隔符。
例如:
{*$text = "I Love"*}
{$text|cat:" Smarty"|upper}
{*输出为:I LOVE SMARTY*}
调节器汇总
调节器 | 作用 | 参数 |
---|---|---|
default | 默认值 | 1 |
escape | 转码 | 1 |
cat | 将给定字符串连接到变量的后边 | 1 |
indent | 缩进 | 2 |
nl2br | 将换行符替换成<br/> | 0 |
string_format | 字符串格式化 | 1 |
date_format | 格式化时间和日期 | 2 |
capitalize | 将变量里的所有单词首字大写 | 0 |
upper | 将变量改为大写 | 0 |
lower | 将变量改为小写 | 0 |
count_characters | 计算字符长度 | 1 |
count_words | 计算变量里的词数 | 0 |
count_sentences | 计算变量里句子的数量 | 0 |
count_paragraphs | 计算变量里的段落数量 | 0 |
strip_tags | 去除html标签 | 0 |
truncate | 截取 | 3 |
replace | 搜索并替换字符串 | 2 |
regex_replace | 寻找和替换正则表达式 | 2 |
wordwrap | 行宽约束 | 3 |
strip | 用字符替换重复空格,换行和制表符 | 1 |
spacify | 字符之间插入字符(串) | 1 |
详解
default
默认值。
index.php
$smarty = new Smarty;
$smarty->assign('text4', "12345");
$smarty->assign('text5', "");
$smarty->display('index.tpl');
index.tpl
{$text4}<br/>
{$text5|default:"12345"}<br/>
输出:
12345
12345
escape
用于html转码,url转码,在没有转码的变量上转换单引号,十六进制转码,十六进制美化,或者javascript转码。默认是html转码。
转码前HTML标签浏览器可以识别,转码后直接打印。
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | string | NO | html | 编码格式 |
index.php
$smarty = new Smarty;
$smarty->assign('text6', "<p>123456</p>");
$smarty->display('index.tpl');
index.tpl
{$text6}<br/>
{$text5|escape}<br/>
{$text5|escape:"html"}<br/>
{$text5|escape:"javascript"}<br/>
输出:
123456
<p>123456</p>
<p>123456</p>
123456<\/p>
cat
将给定字符串连接到变量的后边。
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | string | NO | 空 | 给定的字符串 |
index.php
$smarty = new Smarty;
$smarty->assign('title', 'I love smarty');
$smarty->display('index.tpl');
index.tpl
{$title|cat}<br/>
{$title|cat:"!!"}
输出:
I love smarty
I love smarty!!
indent
缩进。
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | string | NO | 4 | 缩进多少个字符 |
2 | string | NO | 空格 | 代替缩进字符 |
index.php
$smarty = new Smarty;
$smarty->assign('text7', "098765");
$smarty->display('index.tpl');
index.tpl
{$text7}<br/>
{$text7|indent}<br/>
{$text7|indent:"8"}<br/>
{$text7|indent:"8":"\t"}<br/>
输出:
123456
<p>123456</p>
<p>123456</p>
123456<\/p>
注意:
因为HTML会把连续的空格转化成一个空格,所以在浏览器上可能不明显。可以右键查看源代码来查看。
nl2br
将换行符替换成<br/>
,功能同PHP中的nl2br()函数一样。
index.php
$smarty = new Smarty;
$smarty->assign('text8', "123456\n7890");
$smarty->display('index.tpl');
index.tpl
{$text8}<br/>
{$text8|nl2br}<br/>
输出:
123456 7890
123456
7890
注意:
里的\n
需要放在双引号”“之间,单引号不识别转义符号。
string_format
字符串格式化。(十进制、浮点型)
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | string | Yes | - | 使用的格式化方式 |
index.php
$smarty = new Smarty;
$smarty->assign('text9', "23.5787446");
$smarty->display('index.tpl');
index.tpl
{$text9}<br/>
{$text9|string_format:"%.2f"}<br/>
{$text9|string_format:"%d"}<br/>
输出:
23.5787446
23.58
23
date_format
格式化从函数strftime()获得的时间和日期。
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | string | NO | %b %e, %Y | 输出日期的格式 |
2 | string | NO | 空 | 输入为空时的值(linux时间戳) |
index.php
$smarty = new Smarty;
$smarty->assign('time', strtotime('-1 day'));
$smarty->assign('time1', "");
$smarty->display('index.tpl');
index.tpl
{$time}<br/>
{$time|date_format}<br/>
{$time|date_format:"%A, %b %d, %Y"}<br/>
{$time1|date_format:"%A, %b %d, %Y":"1485841461"}<br/>
输出:
1485841709
Jan 31, 2017
Tuesday, Jan 31, 2017
Tuesday, Jan 31, 2017
日期转换格式:
- | - |
---|---|
%a | 星期缩写 |
%A | 星期全称 |
%b(%h) | 月份缩写 |
%B | 月份全称 |
%d(%m/%d/%y) | 日期1~31 |
%e | 日期1~31(仅一位加空格) |
%H | 小时0~23 |
%I | 小时1~12 |
%j | 一年中的第几天 |
%m | 月份1~12 |
%M | 分钟 |
%S | 秒 |
%T | 相当于%H:%M:%S |
%w | 星期几0~6(Sunday being 0) |
capitalize
capitalize:将变量里的所有单词首字大写。
index.php
$smarty = new Smarty;
$smarty->assign('title', 'I love smarty');
$smarty->display('index.tpl');
index.tpl
{$title}<br/>
{$title|capitalize}
输出:
I love smarty
I Love Smarty
upper
将变量改为大写。
index.php
$smarty = new Smarty;
$smarty->assign('title', 'I love smarty');
$smarty->display('index.tpl');
index.tpl
{$title}<br/>
{$title|upper}
输出:
I Love Smarty
I LOVE SMARTY
lower
将变量小写。
index.php
$smarty = new Smarty;
$smarty->assign('title', 'I love smarty');
$smarty->display('index.tpl');
index.tpl
{$title}<br/>
{$title|lower}
输出:
I love smarty
i love smarty
count_characters
计算字符串长度。
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | boolean | NO | false | 是否计算空格 |
index.php
$smarty = new Smarty;
$smarty->assign('title', 'I love smarty');
$smarty->display('index.tpl');
index.tpl
{$title|count_characters}<br/>
{$title|count_characters:true}
输出:
11
13
count_words
计算变量里的词数。
index.php
$smarty = new Smarty;
$smarty->assign('title', 'I love smarty');
$smarty->display('index.tpl');
index.tpl
{$title}<br/>
{$title|count_words}
输出:
I love smarty
3
注意:不适用于中文。
count_sentences
计算变量里句子的数量。
index.php
$smarty = new Smarty;
$smarty->assign('text1', "I love smarty.I love PHP.");
$smarty->assign('text2', "I love smarty. I love PHP.");
$smarty->assign('text3', "I love smarty。 I love PHP.");
$smarty->display('index.tpl');
index.tpl
{$text1}<br/>
{$text1|count_sentences}<br/>
{$text2}<br/>
{$text2|count_sentences}<br/>
{$text3}<br/>
{$text3|count_sentences}<br/>
输出:
I love smarty.I love PHP.
1
I love smarty. I love PHP.
2
I love smarty。 I love PHP.
1
注意:
1.需要在句子终止符号后边添加一个符号(例如空格)才能被识别为句子结束。
2.不识别中文的”。”、”!”等符号。
count_paragraphs
计算变量里的段落数量。
index.php
$smarty = new Smarty;
$smarty->assign('text', "I love smarty.\nI love PHP.");
$smarty->display('index.tpl');
index.tpl
{$text}<br/>
{$text|count_paragraphs}<br/>
输出:
I love smarty.
I love PHP.
2
注意:
在浏览器中,看到的结果为.
I love smarty. I love PHP.
2
不显示换行而显示空格,原因是HTMl不识别’\n’、’\t’等转义字符。
这些叫做whitespace,浏览器会将它们显示为空格。
strip_tags
去除html标签,去除<和>标签,包括在<和>之间的任何内容.
index.php
$smarty = new Smarty;
$smarty->assign('text6', "<p>123456</p>");
$smarty->display('index.tpl');
index.tpl
{$text6}<br/>
{$text|strip_tags}<br/>
输出(源代码):
<p>123456</p>
123456
truncate
截取。
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | integer | No | 80 | 截取字符的数量 |
2 | string | No | … | 截取后追加在截取词后面的字符串 |
3 | boolean | No | false | 是截取到词的边界(假)还是精确到字符(真) |
index.php
$smarty = new Smarty;
$smarty->assign('text10', "abcdefgh");
$smarty->display('index.tpl');
index.tpl
{$text10}<br/>
{$text10|truncate}<br/>
{$text10|truncate:2}<br/>
{$text10|truncate:2:""}<br/>
{$text10|truncate:2:"_"}<br/>
{$text10|truncate:2:"_":true}<br/>
输出:
abcdefgh
abcdefgh
...
ab
a_
a_
replace
搜索并替换字符串
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | string | Yes | - | 要搜索的字符串 |
2 | string | Yes | - | 进行替换的字符串 |
index.php
$smarty = new Smarty;
$smarty->assign('title', "I love smarty");
$smarty->display('index.tpl');
index.tpl
{$title}<br/>
{$title|replace:"smarty":"PHP"}<br/>
输出:
I love smarty
I love PHP
regex_replace
寻找和替换正则表达式。
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | string | Yes | - | 正则表达式 |
2 | string | Yes | - | 进行替换的字符串 |
index.php
$smarty = new Smarty;
$smarty->assign('title', "I love smarty");
$smarty->display('index.tpl');
index.tpl
{$title}<br/>
{$title|regex_replace:"/.(ov)/":"123"}<br/>
输出:
I love smarty
I 123e smarty
wordwrap
行宽约束,指定段落的宽度(也就是多少个字符一行,超过这个字符数换行).默认80.
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | integer | No | 80 | 指定段落(句子)的宽度 |
1 | string | No | \n | 使用什么字符约束 |
1 | boolean | No | false | 是约束到词的边界(假)还是精确到字符(真) |
index.php
$smarty = new Smarty;
$smarty->assign('text11', 'abcdefghijklmnopqrstuvwxyz');
$smarty->display('index.tpl');
index.tpl
{$text11}<br/>
{$text11|wordwrap:"10"}
{$text11|wordwrap:"10":"<br/>"}
{$text11|wordwrap:"10":"<br/>":true}
输出:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghij
klmnopqrsta
uvwxyz
strip
用一个空格或一个给定字符替换所有重复空格,换行和制表符.
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | string | No | 用于替换的字符 |
index.php
$smarty = new Smarty;
$smarty->assign('text', "I love smarty.\nI love PHP.");
$smarty->display('index.tpl');
index.tpl
{$text}<br/>
{$text|strip}<br/>
{$text|strip:"_"}<br/>
输出:
I love smarty.
I love PHP.
I love smarty. I love PHP.
I_love_smarty._I_love_PHP.
spacify
插空,在字符串的每个字符之间插入空格或者其他的字符(串)。
参数:
位置 | 类型 | 必须 | 默认值 | 作用 |
---|---|---|---|---|
1 | string | NO | - | 要插入的字符串 |
index.php
$smarty = new Smarty;
$smarty->assign('text4', "12345");
$smarty->display('index.tpl');
index.tpl
{$text4}<br/>
{$text4|spacify:"_"}<br/>
输出:
12345
1_2_3_4_5