Smarty3【四】常用输出(判断,循环,变量修饰器)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Tacks/article/details/85076734

smarty难道只能{$var}输出变量,而不能在模板进行一些判断或者循环之类的吗,类似tp3的模板引擎一样。答案是当然可以

一 逻辑判断 if

if文档:https://www.smarty.net/docs/zh_CN/language.function.if.tpl#id436306

Smarty的{if}条件判断和PHP的if非常相似,只是增加了一些特性。 每个{if}必须有一个配对的{/if}. 也可以使用{else} 和 {elseif}

来个例子:根据地址栏传过来的today值,来判断是星期几

    {if $smarty.get.today == null}
        空
        {elseif $smarty.get.today eq 0 || $smarty.get.today eq 7}
            周日时间
        {elseif $smarty.get.today eq 6}
            周六时间
        {else}
            周一到周五工作时间
    {/if}

二 循环 for,foreach,while

for文档:https://www.smarty.net/docs/zh_CN/language.function.for.tpl

foreach文档:https://www.smarty.net/docs/zh_CN/language.function.foreach.tpl

while文档:https://www.smarty.net/docs/zh_CN/language.function.while.tpl

for

{for}{forelse}用于创建一个简单的循环。 下面的几种方式都是支持的:
{for $var=$start to $end}步长1的简单循环。
{for $var=$start to $end step $step}指定步长的循环。

 $i@iteration

显示的是当前循环的执行次数

$i@total

显示的是循环执行的总次数

举个例子

//每三个一排循环输出
$smarty->assign('start',1);
$smarty->assign('end',9);
1到9 每三个换行
            {for $i=$start to $end}
                {$i} 
                    {if $i%3 == 0}
                        <br/>
                    {/if}
            {/for}
        <b>本次循环了{$i@total}次</b>

     <hr>
打印1到100的奇数 利用幅度来控制 然后每5个换行<br/>
    $i@total     显示的是循环执行的总次数<br/>
    $i@iteration  显示的是当前循环的执行次数<br/>

        {for $i=$start to 100  step 2}
            {$i}&nbsp;
            {if $i@iteration %5 == 0 }
                <br/>
            {/if}
        {/for}
        <b>本次循环了{$i@total}次</b>

foreach

在项目中,常常使用foreach来进行循环数组进行输出

{foreach from=$source key=key item=item}

              from是来自那个变量

             然后遍历整个数组,把键和值取出来

             分别赋值给key item

             因此在循环过程中key item的值不断变化

{/foreach}

$i@first

布尔值是否是第一次循环

$i@last

布尔值是否是最后一次循环

$arr = array(
0=>array('name'=>'张飞','age'=>20),
1=>array('name'=>'张飞','age'=>20),
2=>array('name'=>'张飞','age'=>20),
3=>array('name'=>'张飞','age'=>20),
    );
$smarty->assign('arr',$arr);
 {foreach from=$arr key=k item=v}
    {if $v@first}
                    <tr bgcolor="pink">
                        <td>{$v['name']}</td>
                        <td>{$v['age']}</td>
                    </tr>
    {elseif $v@last}
                    <tr bgcolor="gray">
                        <td>{$v['name']}</td>
                        <td>{$v['age']}</td>
                    </tr>
   {else}
                     <tr>
                        <td>{$v['name']}</td>
                        <td>{$v['age']}</td>
                    </tr>
     {/if}
 {/foreach}

while

$smarty->assign('age',10);
{while $age < 18 }
                    <tr>
                        <td>{$age++}岁</td>
                    </tr>
{/while}

三 变量修饰器

变量修饰器文档:https://www.smarty.net/docs/zh_CN/language.modifiers.tpl

可以用于变量, 自定义函数或者字符串。 使用修饰器,需要在变量的后面加上|(竖线)并且跟着修饰器名称。 修饰器可能还会有附加的参数以便达到效果。 参数会跟着修饰器名称,用:(冒号)分开。 

$smarty->assign('time',time());//时间戳
$smarty->assign('str','This My is Name :Tacks!!!');
$smarty->assign('hobby','I like play basketball');
变量修饰器本质就是一个函数:
修饰器可以作用于任何类型的变量,数组或者对象。
将变量作为函数的参数来进行格式化后显示在页面中

当前时间
{$time|date_format:"%Y-%m-%d %H:%M:%S"}
下面一句话
{$str}
upper全部大写
{$str|upper}
lower全部小写
{$str|lower}
一句话 + 爱好
{$str|cat:"and ,$hobby"}

小结:

       这写模板里面的判断,循环,变量修饰器,的使用,就也体现了,业务与显示的分离,php去获取数据处理数据,然后扔给页面,具体判断可以直接在页面里面进行,也是比较方便,但是模板里面最好不要做太多的负责的运算或者处理,保证后台的数据原始。

猜你喜欢

转载自blog.csdn.net/Tacks/article/details/85076734