小慕上篇介绍了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模版引擎页面流程控制之顺序、选择、循环模式》