心情碎语:暂无碎语

您的位置:慕轲博客 >MVC基础专题> Smarty模版引擎页面流程控制之顺序、选择、循环模式

Smarty模版引擎页面流程控制之顺序、选择、循环模式

小慕上篇介绍了Smarty模板安装搭建的简单使用方法,并且通过这种使用方法了解了smarty的运行原理!那么我们来讲下smarty语法之流程控制,简称控制流,嘻嘻,小慕瞎说的不要太在意,那下面开说了。

1、顺序流程模式其实这个流程没什么好介绍的了,就是至上而下没有什么需要说道的。这里说一下用到的一些变量知识。

上篇说道,变量是通过$smarty->assign('变量名','变量值');传递到Smarty模版里使用的,有人就会问了如果没有在后台php里定义某个变量而在模版里需要使用一些变量,怎么在Smarty模版页面定义变量呢?这里小慕要介绍个Smarty模版里定义变量方法:

{?assign var="变量名" value=变量值?} //注意这里使用的"{?"和"?}"是上篇文章里定义的格式,Smarty默认的是“{”和“}”,但是小慕
//为了与JS等区别做的修改,当然你也可以定义自己的格式,这里小慕按照习惯就这样用了,下同。
{?assign var="temp1" value=1?} //注意value赋值时,不加引号就为数字,否则就作为字符串处理,val作为变量名必须要用字符串。
{?assign var="temp2" value="慕轲博客"?} //此处value即为字符串。

上边说的是赋值一个变量,怎么使用呢?使用起来和php传递过来的变量是一样的。

{?$temp1?}
{?assign var="temp1" value=$temp1+1?}
{?$temp1?}
{?$temp2?}

2、选择流程模式所谓选折就离不开判断,说道判断大家首先想到的是if-else。那么Smarty模版怎么进行变量的判断呢?if-else怎么使用呢?好了废话不多说,向下看:

PHP页面代码: 

$temp=1; 
$smarty->assign("temp",$temp); 

模板前台:

{?if $temp gt 0?}
临时变量>0 
{?else?}
临时变量<=0 
{?/if?}

运行,查看输出结果! 

其中这里用到了gt,他是什么意思呢?很多人一定看出来了,他就是大于的意思,也就是“>”这个。这些代替还有很多,下边小慕列举一些出来。

eq 判断是否相等  == 
neq、ne 不相等  != 
lt 小于         < 
lte 小于等于    <= 
gt 大于         > 
gte 大于等于    >= 
is div by 被某数整除   % 
is even 为偶数         %2==0 
is odd 为奇数          %2!=0 

注意:作为条件的表达式不能加小括号以空格代替,elseif中间不能有空格!!!例如: 

{?if 条件?}

输出内容1

{?elseif 条件?}

输出内容2

{?else?}

{?/if?}

3、循环流程模式。哈哈说道循环,大家会想到很多格式,比如for循环,while结构循环等等。而在smarty模板中循环有2种section、foreach,主要是针对数组的取值

1)section   section无法用于引用数组,但可以实现以下功能,并且可以实现普通for循环 

PHP页面:

$arr1=array(6,2,9); 

前台页面:

{?section name=k loop=$arr1?}
值:{?$arr1[k]?}   //注意:索引k在使用的时候没有$,并且无法单独使用
{?sectionelse?}
<font color="red" style="font-weight:bold;">数组为空!</font> //数组为空使用sectionelse可以进行处理
{?/section?}
//利用section实现普通for循环 
{?section name=i loop=$arr1?}
索引:{?$smarty.section.i.index?}循环{?$smarty.section.i.index+1?}次<br /> 
{?/section?}

2)foreach循环 

PHP页面:

$arr2=array("a"=>1,"b"=>2,"c"=>3); 

前台页面: 

{?foreach from=$arr2 item=v key=k?}
键:{?$k?}值:{?$v?}  
{?foreachelse?}
<font color="red" style="font-weight:bold;">引用数组为空!</font> //数组为空使用sectionelse可以进行处理
{?/foreach?}

4、利用foreach循环读取数据库记录并显示。

PHP代码 

$result=$mysql->execute("select * from datatable"); 
while($row=mysql_fetch_array($result)){ 
$arr1[]=$row; 
} 
$smarty->assign("arr1",$arr1); 

前台读取,“.”后面是字段名 

{?foreach from=$arr1 item=v?}
{?$v.Sid?}
{?/foreach?}

---

转载请注明本文标题和链接:《Smarty模版引擎页面流程控制之顺序、选择、循环模式