知识大全 如何在smarty中增加类似foreach的功能自动加载数据

Posted

篇首语:我自横刀向天笑,去留肝胆两昆仑。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何在smarty中增加类似foreach的功能自动加载数据相关的知识,希望对你有一定的参考价值。

  在smarty中使用自定义插件来加载数据(见 编写Smarty插件在模板中直接加载数据的详细介绍) 在使用的时候还是感觉不够方便 灵机一动就想写成类似foreach那种标签 第一步 在Smarty_Compiler class php的_pile_tag函数中增加

复制代码 代码如下: //加载数据的开始标签 case load : $this >_push_tag( load ); return $this >_plie_load_start($tag_args); break; //加载数据的结束标签 case /load : $this >_pop_tag( load ); return "<?php endforeach; endif; unset(/$_from); ?>"; break;

   第二步 增加一个方法

复制代码 代码如下: /** * 加载数据 * @param $tag_args */ function _plie_load_start($tag_args) $key = substr(md ($tag_args) ); //根据参数生成一个特殊的变量名 $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! ); $db = $class::factory(array( table => substr($attrs[ table ] ))); //定义新变量 $this >_tpl_vars[$key] = $db >get_block_list(array(substr($attrs[ where ] )) $attrs[ limit ]); $tag_args = "from=/$$key " $tag_args; //调用foreach标签处理函数进行处理 return $this >_pile_foreach_start($tag_args);

   这样就可以在模板中使用load这个标签了 用法例如

复制代码 代码如下: cha138/Article/program/PHP/201311/21257

相关参考