PHP
—
教程 在 smarty 中增加类似 foreach 的功能自动加载数
据
在 smarty 中使用自定义插件来加载数据(见:编写 Smarty 插件在模板中直接加载数据的
详细介绍),在使用的时候还是感觉不够方便,灵机一动就想写成类似
foreach
那种标签:
第一步:在 Smarty_Compiler.
class
.php 的_compile_tag 函数中增加:
代码如下:
//加载数据的开始标签
case
'load':
$this
->_push_tag('load');
return
$this
->_complie_load_start(
$tag_args
);
break
;
//加载数据的结束标签
case
'/load':
$this
->_pop_tag('load');
return
"<?php endforeach; endif; unset(/$_from); ?>";
break
;
第二步:增加一个方法:
代码如下:
/**
* 加载数据
* @param $tag_args
*/
function
_complie_load_start(
$tag_args
)
{
$key
=
substr
(md5(
$tag_args
), 8, 16);
//根据参数生成一个特殊的变量名
$attrs
=
$this
->_parse_attrs(
$tag_args
);
//这里可以增加更多的处理
$class
= (!isset(
$attrs
['class']) ||
empty
(
$attrs
['class'])) ? 'cls_crud' : trim(
$attrs
['class']);
(!isset(
$attrs
['table']) ||
empty
(
$attrs
['table'])) &&
exit
('`table` is empty!');