[转]Smarty模板中for循环的扩展
近两年来,⼀直在使⽤Smarty模板做php系统的开发,感觉效率⾮常⾼。但是随着使⽤的增多,也出现了⼀些不⽅便的地⽅,或者需要解决的难题,今后我会把这些问题的解决慢慢写上来和⼤家分享。
今天的这个问题可能也困扰了很多⼈,它说简单很简单,但是smarty中就是没有⼀个解决的⽅案,我上⽹搜了⼀下,也是没有满意的答案,⽽且⼤部分都是答⾮所问。
先来看问题:
需要能在Smarty模板⽂件中循环$sCount变量,就像类似于下⾯的PHP循环形式:
for ($i = 0; $i < $sCount; $i++)
{
......
}
但是⼜不使⽤{php}。。。{/php}标签。Smarty中的循环⽆论foreach还是section全部都是关于数组循环的
语句,要想循环,就必须在php⽂件中先建⽴⼀个数据组。⽽且有的时候,这个数组的元素数量是不定的。这就给开发⼈员带来的多出⼀倍的代码量。
考察了smarty⽂档后,发现可以⽤⾃定义的plugin来解决这个问题,于是就动⼿写了⼀个。
plugin⽂件:
<?php
function smarty_block_for($params, $content, &$smarty)
{
if (is_null($content)) {
return;
}
$from = 0;
$to = 0;
$step = 1;
foreach ($params as $_key => $_val) {
switch ($_key) {
case 'from':
case 'to':
case 'step':
$$_key = (int)$_val;
break;
default:
$smarty->trigger_error("textformat: unknown attribute '$_key'");
}
}
$_output = '';
for($_x = $from; $_x <= $to; $_x += $step) {
$_output .= $content."\n\r";
}
return $_output;
}
?>
把上⾯的内容复制到⼀个php⽂件中,⽂件名保存为“block.for.php”
然后把这个⽂件复制到smarty模板的安装⽬录下的plugins⽂件夹中即可。
smarty模板引擎使用在模板⽂件中的⽤法:
{for start = 1 to = 5 step = 1}
...要循环的html内容...
{/for }>
循环次数为 (to - start + 1) / step
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论