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

 更新时间:2013年06月26日 09:55:27   作者:  
本篇文章是对在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!');
 $db = $class::factory(array('table' => substr($attrs['table'], 1, -1)));
 //定义新变量
 $this->_tpl_vars[$key] = $db->get_block_list(array(substr($attrs['where'], 1, -1)), $attrs['limit']);
 $tag_args = "from=/${$key} " . $tag_args;

 //调用foreach标签处理函数进行处理
 return $this->_compile_foreach_start($tag_args);
}

这样就可以在模板中使用load这个标签了。用法例如:
复制代码 代码如下:

{load table="test" where="`id`<100" limit=10 item=rec}
   ...
{/load}

相关文章

  • PHP5.5新特性之yield理解与用法实例分析

    PHP5.5新特性之yield理解与用法实例分析

    这篇文章主要介绍了PHP5.5新特性之yield理解与用法,结合实例形式分析了php5.5 yield生成器功能、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-01-01
  • php的ajax框架xajax入门与试用介绍

    php的ajax框架xajax入门与试用介绍

    xajax功能很简单,但很灵活!~它不象其它一些大的框架,功能确实强大,但执行速度不敢恭维。。功能虽多,但不够灵活。api多,学起来简直如同学习一门新的语言。
    2010-12-12
  • php实现图片局部打马赛克的方法

    php实现图片局部打马赛克的方法

    这篇文章主要介绍了php实现图片局部打马赛克的方法,实例分析了php针对图片操作的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • PHP一致性hash分布式算法封装类定义与用法示例

    PHP一致性hash分布式算法封装类定义与用法示例

    这篇文章主要介绍了PHP一致性hash分布式算法封装类定义与用法,结合完整实例形式分析了一致性hash分布式算法的原理、实现及使用方法,需要的朋友可以参考下
    2018-08-08
  • PHP同时连接多个mysql数据库示例代码

    PHP同时连接多个mysql数据库示例代码

    这篇文章主要介绍了PHP同时连接多个mysql数据库的具体实现,需要的朋友可以参考下
    2014-03-03
  • ThinkPHP删除栏目(实现批量删除栏目)

    ThinkPHP删除栏目(实现批量删除栏目)

    下面小编就为大家带来一篇ThinkPHP删除栏目(实现批量删除栏目)。小编觉得挺不错的。现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • php 抽象类的简单应用

    php 抽象类的简单应用

    我想博客中的 文章列表和单个的文章阅读 统一起来,我觉得除了sql查询语句结构不同,HTML代码不同,其它也就一样。不过话说回来,这两个都是主要功能,所以这的确有点不适合,不过昨晚读了一点设计模式,好歹得写点啥好。
    2011-09-09
  • php写入txt乱码的解决方法

    php写入txt乱码的解决方法

    在本篇文章里小编给大家分享的是关于php写入txt乱码的知识点以及解决方法,有需要的朋友们参考下。
    2019-09-09
  • php实现的简单数据库操作Model类

    php实现的简单数据库操作Model类

    这篇文章主要介绍了php实现的简单数据库操作Model类,结合实例形式分析了php数据库操作模型类的定义与使用技巧,包括数据库的基本增删改查等功能,需要的朋友可以参考下
    2016-11-11
  • PHP编程过程中需要了解的this,self,parent的区别

    PHP编程过程中需要了解的this,self,parent的区别

    this是指向对象实例的一个指针,在实例化的时候来确定指向;self是对类本身的一个引用,一般用来指向类中的静态变量;parent是对父类的引用,一般使用parent来调用父类的构造函数。
    2009-12-12

最新评论