编写Smarty插件在模板中直接加载数据的详细介绍


Posted in PHP onJune 26, 2013

之前使用smarty的时候,通常是在php程序端读取数据(一般从数据库),然后assign给模板的变量,才可以在前端使用这个变量。这样不是不好,只是数据多的时候php端的代码维护起来有点麻烦,特别是当存在很多模板块化得数据时。

所以写了个插件,结合之前的crud类实现在前端模板可以加载一些模块化得数据。

<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */
/**
 * Smarty {load_data} function plugin
 *
 * Type:     function<br>
 * Name:     eval<br>
 * Purpose:  evaluate a template variable as a template<br>
 * @link http://smarty.php.net/manual/en/language.function.eval.php {eval}
 * @param array
 * @param Smarty
 */
function smarty_function_load_data($params, &$smarty)
{
    $class = (!isset($params['class']) || empty($params['class'])) ? 'cls_crud' : trim($params['class']);
    (!isset($params['table']) || empty($params['table'])) && exit('`table` is empty!');
    $db = $class::factory(array('table' => $params['table']));
    //var_dump($params);
    if (!empty($params['assign'])) {
        //把数据赋值给变量$params['assign'],这样前端就可以使用这个变量了(例如可以结合foreach输出一个列表等)
        $smarty->assign($params['assign'], $db->get_block_list(array($params['where']), $params['limit']));
    }
}
?>

写成插件除了可以减少很多维护之后,还有一个显著的好处就是可以在这个插件中对查询数据库的操作进行统一的格式化和过滤操作。
这样在前端就可以这样加载数据了:
{load_data assign="list" table="test" where="`id`<100" limit=10}
{foreach from=$list item=rec}
   ...
{/foreach}
PHP 相关文章推荐
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
php中url传递中文字符,特殊危险字符的解决方法
Aug 17 PHP
php二维数组转成字符串示例
Feb 17 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
php导入模块文件分享
Mar 17 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
Jul 25 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
比较strtr, str_replace和preg_replace三个函数的效率
Jun 26 #PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 #PHP
php ci框架验证码实例分析
Jun 26 #PHP
解析php file_exists无效的解决办法
Jun 26 #PHP
使用HMAC-SHA1签名方法详解
Jun 26 #PHP
php读取文件内容的几种方法详解
Jun 26 #PHP
深入file_get_contents与curl函数的详解
Jun 25 #PHP
You might like
php在apache环境下实现gzip配置方法
2015/04/02 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
微信支付开发交易通知实例
2016/07/12 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
python 命令行传入参数实现解析
2019/08/30 Python
美国眼镜网:GlassesUSA
2017/09/07 全球购物
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
英文版餐饮业求职信
2013/10/18 职场文书
党校学习思想汇报
2014/01/06 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
成绩单公证书
2014/04/10 职场文书
扬尘污染防治方案
2014/06/15 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
民主评议党员个人总结
2015/02/13 职场文书