smarty模板的section循环块和foreach循环块

王朝php·作者佚名  2005-05-27
窄屏简体版  字體: |||超大  

最近在开发模块的时候,发现如果不用php 的smarty模板,对于一个相对复杂一点的模块来说,简直就是灾难!模块和区块文件的编写会变得很麻烦,只能将html和php大量的嵌套使用!这样给模块的开发带来了极大的不便,所以这几天好好看了一下在xoops下面使用smarty模板的方法,发现其精华之一就是section循环块和 foreach循环块,下面我就我自己的理解来讲解这两个循环:

1. foreach:用于循环简单数组,它是一个选择性的section循环,它的定义格式为:

{foreach from=$array item=array_id}

{foreachelse}

{/foreach}

其中,from 指出要循环的数组变量,item为要循环的变量名称,循环次数由from所指定的数组变量的个数所决定。{foreachelse}用来当程序中传递过来的数组为空时的处理,下面是一个简单的例子:

===========================================

example1.html

===========================================

这里将输出一个数组:

<{foreach from=$newsArray item=newsID}>

新闻编号:<{$newsID.newsID}>

新闻内容:<{$newsID.newsTitle}>

<{foreachelse}>

对不起,数据库中没有新闻输出!

<{/foreach}>

==========================================

example6.php

==========================================

/*********************************************

*

* 文件名: example1.php

* 作 用: 显示实例程序

*

* 作 者:andy

* Email: andy_zidane@hotmail.com

*

*********************************************/

$xoopsOption['template_main'] = 'example1.html';//假设是模块目录下的index.php文件使用的模板

$array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻");

$array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻");

$array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻");

$array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻");

$array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻");

$array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻");

$xoopsTpl->assign("newsArray", $array);

?>

在页面中输出的内容为

=============================================

example1.php 输出文件

=============================================

这里将输出一个数组:

新闻编号:1

新闻内容:第1条新闻

新闻编号:2

新闻内容:第2条新闻

新闻编号:3

新闻内容:第3条新闻

新闻编号:4

新闻内容:第4条新闻

新闻编号:5

新闻内容:第5条新闻

新闻编号:6

新闻内容:第6条新闻

foreach还可以用foreachelse来匹配,用foreachelse来表示当传递给foreach的数组为空值时程序要执行的操作

2section:

section的产生是为解决foreach的不足的,与foreach一样,它用于设计模板内的循环块,它较为复杂,可极大程序上满足程序需要,所以在程序中我习惯使用它而不使用foreach,基本原形为:

{section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]}

name: section的名称,不用加$

$loop: 要循环的变量,在程序中要使用assign对这个变量进行操作。

$start: 开始循环的下标,循环下标默认由0开始

$step: 每次循环时下标的增数

$max: 最大循环下标

$show: boolean类型,决定是否对这个块进行显示,默认为true

这里有个名词需要说明:

循环下标:实际它的英文名称为index,是索引的意思,这里我将它译成"下标",主要是为了好理解。它表示在显示这个循环块时当前的循环索引,默认从0开始,受$start的影响,如果将$start设为5,它也将从5开始计数,在模板设计部分我们使用过它,这是当前 {section}的一个属性,调用方式为Smarty.section.sectionName.index,这里的sectionName指的是函数原型中的name属性。

{section}块具有的属性值,分别为:

1. index: 上边我们介绍的"循环下标",默认为0

2. index_prev: 当前下标的前一个值,默认为-1

3. index_next: 当前下标的下一个值,默认为1

4. first: 是否为第一下循环

5. last: 是否为最后一个循环

6. iteration: 循环次数

7. rownum: 当前的行号,iteration的另一个别名

8. loop: 最后一个循环号,可用在section块后统计section的循环次数

9. total: 循环次数,可用在section块后统计循环次数

10. show: 在函数的声明中有它,用于判断section是否显示

同样,{section}也可以配合使用{sectionelse},用来表示传入的数组变量为空时对模板进行的处理。

我们把上边的那个例子使用{section}来替代{foreach}来实现现样的功能,注意,在这个例子中我只将tpl模板中的{foreach}用

{section}来实现,php程序文件中没有任何改动,同时加了{sectionelse}处理块:

===========================================

example1.html(改)

===========================================

这里将输出一个数组:

<{section name=loop loop=$newsArray }>

新闻编号:<{$newsArray [loop].newsID}>

新闻标题:<{$newsArray [loop].newsTitle}>

<{sectionelse}>

对不起,没有任何新闻输入!

<{/section}>

输出的那用将是相同的,这里的{section}块的对于变量的命名方式感觉有些别扭,不过没关系,你只要记住模板变量使用:

$loopName[name].var这种模式就行了,loopName为loop处赋予的变量名,[name]为name处赋予的字符串,.后为为你要在程序数组中设定要与值相对应的下标名称就行了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航