在smarty中,怎样实现类似while或for的功能?

zuonet_cn 2007-09-29 05:46:50
我需要在模板中 做一定次数的 操作。
类似于:
$i=3;
while($i>0)
{
echo "someThing";
$i--;
}
或for($i=0;$i<3;$i++)
{

}

的操作.


但在smarty的模板中怎样实现呢?
...全文
1012 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
An4Greenhand 2011-09-19
  • 打赏
  • 举报
回复
路过 学习
zuonet_cn 2007-09-30
  • 打赏
  • 举报
回复
谢谢15楼的gs6fox , 那么有耐心打了那么多字。 也谢谢回答我问题的众多朋友。我会把那可怜的20分
分给你们的。


其实我也觉得,有些事是smarty该做的,有些事是smarty不该做的.
gs6fox 2007-09-30
  • 打赏
  • 举报
回复
做东西不能局限于一样技术的,smarty是很好,但是不能什么地方,什么场合都非得要用
像你说的问题,如果为了你可以用<section>把要输出的东西放在数组里就够了,要不就在
页面上用个PHP的while或for 总之,如果你要非要着重去用smarty来实现while的功能
其实不是不可能,用一个foreach和一个section嵌套就可以达到你所想要的,但是写起来
会比较麻烦,程序应该是在保证可读性运行速度的前提下,代码越简练越好

你在PHP中处理苹果的果数的HTML实际上是个很简单的事情,这样你只需要一个二维数组就
可以将全部的变量包括进去了,模版上用一个foreach就可以输出,看起来也条理也比较清楚
在模版中又可以少了一次循环,在模版中循环的速度远是比不上在PHP程序中的

所以你完全没有必要执意的用smarty去实现类似的while功能
如果你非要这样做,我可以给你一个思路
其实用section就可以了,你在PHP中设置一个数组,这个数组的长度就是苹果的果数,再用一个
section输出苹果果数就可以了,不过这个数据的下标记得要用默认的数字索引,数据随便写反正
也没有用

$array_index=array();
for($i=0;$i<$count;$i++)$array_index[$i]=$i;

--------------------------------------------------

<[section name=name1 loop=$array_index]>
<img src="苹果.jpg">
<[/section]>

这样你只要在PHP控制$array_index的长度就可以实现循环
zuonet_cn 2007-09-30
  • 打赏
  • 举报
回复
to 11楼的 netstu
把你的数据形式举个例子呀
===================================================

我在七、八楼,举了例.
helloyou0 2007-09-30
  • 打赏
  • 举报
回复
咳,
用str_repeat作modifier就行了
netstu 2007-09-30
  • 打赏
  • 举报
回复
或者直接在smarty模板中使用php代码也是可行的呀
netstu 2007-09-30
  • 打赏
  • 举报
回复
把你的数据形式举个例子呀
fxs_2008 2007-09-30
  • 打赏
  • 举报
回复
4楼应是正解
但楼主里的要用到两个循环嵌套!
不知怎么做
可能还不如不用模板主便!
dreambird1983 2007-09-30
  • 打赏
  • 举报
回复
好像不行吧,除非放到数组里,smarty好像不能根据某个数值进行循环吧,初学~~~等高人~~~
zuonet_cn 2007-09-30
  • 打赏
  • 举报
回复
我想到的方法是,直接在php的页面中,把<img src="苹果.jpg" >先保存在数组中,
即:
var p=array(
array(
"name" => "小陈",
"num" => 3, //表示有3个苹果
"html" =>"<img src=\"苹果.jpg\" > <img src=\"苹果.jpg\" > <img src=\"苹果.jpg\" >"
),
......
);

但我不想把这些html的代码放到php中去。而是直接在smarty模板中用smarty来实现这种功能.

zuonet_cn 2007-09-30
  • 打赏
  • 举报
回复
具体情况:
我有3个人,每个人有不同数目的苹果。我在php建了一个数组保存它。
如:
var p=array(
array(
"name" => "小陈",
"num" => 3 //表示有3个苹果
),
array(
"name" => "小红",
"num" => 5
),
array(
"name" => "小梅",
"num" => 2
)
);

然后在smarty的模板中,我希望通过每个人的苹果个数输出相应数目的苹果图片(html:<img src="苹果.jpg">)。
更具体一点,我希望生成的html是下面这样:
<table>
<tr>
<td>小陈</td>
<td><img src="苹果.jpg"><img src="苹果.jpg"><img src="苹果.jpg"></td>
</tr>
<tr>
<td>小红</td>
<td><img src="苹果.jpg"><img src="苹果.jpg"><img src="苹果.jpg"><img src="苹果.jpg"><img src="苹果.jpg"></td>
</tr>
<tr>
<td>小梅</td>
<td><img src="苹果.jpg"><img src="苹果.jpg"></td>
</tr>
</table>
helloyou0 2007-09-30
  • 打赏
  • 举报
回复
http://smarty.php.net/manual/en/language.function.foreach.php

Example 7-5. The item attribute
dreambird1983 2007-09-30
  • 打赏
  • 举报
回复
把循环输出的内容放数组里啊,都是这样做的吧
lostgdi731 2007-09-30
  • 打赏
  • 举报
回复
php里:
$your_array = array();
$your_array[] = array("id" =>1
,"name" =>"hei");
$your_array[] = array("id" =>2
,"name" =>"guy");

$smart_obj->assign('your_array',$your_array);


在tpl文件里
<table>
<!-- BEGIN your_array -->
<tr bgcolor='#FFFFFF'>
<td align='center'>{id}</td>
<td align='center'><b><font color='#6600FF' size='4'>{name}</font></b></td>
</tr>
<!-- END your_array -->
</table>
FIREGUNS 2007-09-29
  • 打赏
  • 举报
回复
具体情况说出来。
section应该能够实现。
zuonet_cn 2007-09-29
  • 打赏
  • 举报
回复
foreach 或者 section 是针对数组的啊。

我现在不是对数组进行循环。
Aylazhang 2007-09-29
  • 打赏
  • 举报
回复
foreach 或者 section

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧