smarty模板中的标签有以下输出方式:
① 原样输出,即&标签名
② 标签参与数学运算(不推荐,模板只保持输出就行了)
{$age+30}
老头的真实年龄是{$age},他找老婆的最适合年龄是{$age-$sub}岁
{30+$age} 这种写法在smarty2.6里,是不支持的,即运算的时候,$标签要放在最前面
建议不要这样写,为了兼容就版本的smarty
③ 标签可以进行 if else 判断(从分工角度看,模板不应用负责逻辑判断,有时,在模板上,进行逻辑判断,可以极大的简化工作,比如:会员普通会员,VIP会员,在页面右上角,显示不同的提)
从地址栏上传值,判断是星期几?
如果是0,7,则为周日,如果是6,则为周六,其余则为工作日
{if $smarty.get.today == 0 || $smarty.get.today == 7}
今天是周日
{else if $smarty.get.today == 6}
今天是周六
{else}
今天是工作日,上班去吧
{/if}
④ 标签可以用于控制循环语句
for , while(smarty3新增) , foreach , section
$smarty->assign('start',1);
$smarty->assign('end',10);
接下来打印,1到100之间的所有奇数:
常规想法:是用%2 == 1 ,来判断并打印
但是我们可以利用for循环的'步长'属性来控制
步长即,由小到大过程中,每一步的增长"幅度",
1,3,5,7,这就每一步递增2
{for $i=$start to 100 step 2}
{$i} {if $i@iteration % 3 == 0}
{/if}
{/for}
$i@iteration表示当前循环单元,是整体循环体中的第几次循环
用@first控制首行
@first是1个布尔值,当第一次循环时,其值为真,否则其值为假
@last也是一个布尔值,当此次循环的次数等于总循环次数的时候,其值为真,否则其值为假
序号 商品名 商品价格
{foreach $goods as $k=>$g}
{$g@iteration} {$g.goods_name} {$g.shop_price}
{/foreach}
{literal}
foreach循环数组的典型写法
{foreach from=$source key=$key $item=$item}
{/foreach}
如何来理解foreach呢?
答:from是来自的意思,即,循环$source这个变量
从头到尾,挨个的把$source的每个单元的"键"和"值"拿出来
分别赋给 $key,$item
因此,循环过程中,$key,$item的值,不断变化,直到循环结果
{/literal}
section写法:
{literal}
section
一般section这么写{section loop=$source name=g}
loop是待循环的数组
name=g,代表每一次循环,g=0 1 2 3 ....
如果数组也是标签的索引数组,恰好就是数组的每一个键
因此手册上说,section用于循环从0开始的索引数组
显示时,$smarty[g].键名
{/literal}
布尔商场商品列表
序号 商品名 商品价格
{section loop=$goods name=g}
{$goods[g].goods_id} {$goods[g].goods_name} {$goods[g].shop_price}
{/section}
“注”:{foreach}可以做到{section}做到的功能,而且更简单更清晰的语法。一般更推荐使用{foreach}语法
⑤ 变量调节器,通过变量调节器,来对变量的值进行微调,比如:把时间戳微调成 日期
变量调节器的本质是一个函数
这个函数,以标签对应的变量值为参数,然后运算,把返回值,显示在标签处
如:{$g.add_time}返回的是一个时间戳
微调成日期
{$g.add_time|date_format:"%Y-%m-$d %H:%M:%S"}
变成年月日 时:分:秒这种格式
{$poem|upper}
{$poem|lower}
{$poem|upper|lower}