smarty模板中的标签有以下输出方式:

① 原样输出,即&标签名

② 标签参与数学运算(不推荐,模板只保持输出就行了)

<p>{$age+30}</p>
<p>老头的真实年龄是{$age},他找老婆的最适合年龄是{$age-$sub}岁</p>
<p>{30+$age} 这种写法在smarty2.6里,是不支持的,即运算的时候,$标签要放在最前面<br />
            建议不要这样写,为了兼容就版本的smarty
</p>

③ 标签可以进行 if else  判断(从分工角度看,模板不应用负责逻辑判断,有时,在模板上,进行逻辑判断,可以极大的简化工作,比如:会员普通会员,VIP会员,在页面右上角,显示不同的提)

<p>
            从地址栏上传值,判断是星期几?
            如果是0,7,则为周日,如果是6,则为周六,其余则为工作日
        </p>
        <p>
            {if $smarty.get.today == 0 || $smarty.get.today == 7}
             今天是周日
            {else if $smarty.get.today == 6} 
             今天是周六
            {else}
             今天是工作日,上班去吧
            {/if}
        </p>

④ 标签可以用于控制循环语句

    for  ,  while(smarty3新增)  ,  foreach  ,  section

$smarty->assign(‘start’,1);
$smarty->assign(‘end’,10);

<pre>接下来打印,1到100之间的所有奇数:
            常规想法:是用%2 == 1 ,来判断并打印
            但是我们可以利用for循环的'步长'属性来控制
            步长即,由小到大过程中,每一步的增长"幅度",
            1,3,5,7,这就每一步递增2
        </pre>
 
        <p>
            {for $i=$start to 100 step 2}
                {$i}  {if $i@iteration % 3 == 0}<br /> {/if}
            {/for}
            <br />
            <h2>$i@iteration表示当前循环单元,是整体循环体中的第几次循环</h2>
        </p>

<pre>
    用@first控制首行
    @first是1个布尔值,当第一次循环时,其值为真,否则其值为假
    @last也是一个布尔值,当此次循环的次数等于总循环次数的时候,其值为真,否则其值为假
    </pre>
    <table border="1px">
        <tr><td>序号</td><td>商品名</td><td>商品价格</td></tr>
        {foreach $goods as $k=>$g}
        <tr {if $g@first} bgcolor="blue" {else if $g@last} bgcolor="green" {/if}>
        <td>{$g@iteration}</td><td>{$g.goods_name}</td><td>{$g.shop_price}</td></tr>
        {/foreach}
    </table>

foreach循环还有smarty2的经典写法,如下:

{literal}
    foreach循环数组的典型写法
    {foreach from=$source key=$key $item=$item}
    {/foreach}
 
    如何来理解foreach呢?
    答:from是来自的意思,即,循环$source这个变量
 
    从头到尾,挨个的把$source的每个单元的"键"和"值"拿出来
    分别赋给 $key,$item
 
    因此,循环过程中,$key,$item的值,不断变化,直到循环结果
{/literal}

section写法:

{literal}
 
    <h2>section</h2>
 
    <pre>
    一般section这么写{section loop=$source name=g}
    loop是待循环的数组
 
    name=g,代表每一次循环,g=0 1 2 3  ....
    
    如果数组也是标签的索引数组,恰好就是数组的每一个键
 
    因此手册上说,section用于循环从0开始的索引数组
 
    显示时,$smarty[g].键名
    </pre>
    
    {/literal}
    <h2>布尔商场商品列表</h2>
    <table border="1px">
        <tr><td>序号</td><td>商品名</td><td>商品价格</td></tr>
        {section loop=$goods name=g}
        <tr><td>{$goods[g].goods_id}</td><td>{$goods[g].goods_name}</td><td>{$goods[g].shop_price}</td></tr>
        {/section}
    </table>

“注”:{foreach}可以做到{section}做到的功能,而且更简单更清晰的语法。一般更推荐使用{foreach}语法

⑤ 变量调节器,通过变量调节器,来对变量的值进行微调,比如:把时间戳微调成 日期

 变量调节器的本质是一个函数
 这个函数,以标签对应的变量值为参数,然后运算,把返回值,显示在标签处

 如:{$g.add_time}返回的是一个时间戳
 微调成日期
 {$g.add_time|date_format:"%Y-%m-$d %H:%M:%S"}
 变成年月日 时:分:秒这种格式
<h2>{$poem|upper}</h2>
    <h2>{$poem|lower}</h2>
    <h2>{$poem|upper|lower}</h2>