编写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中使用Oracle数据库(1)
Oct 09 PHP
php MsSql server时遇到的中文编码问题
Jun 11 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
Nov 02 PHP
php获取域名的google收录示例
Mar 24 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 PHP
PHP中TP5 上传文件的实例详解
Jul 31 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
PDO::errorCode讲解
Jan 28 PHP
php 的多进程操作实践案例分析
Feb 28 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 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
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
php代码把全角数字转为半角数字
2007/12/10 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php数组添加元素方法小结
2014/12/20 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
python生成带有表格的图片实例
2019/02/03 Python
pandas如何处理缺失值
2019/07/31 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
责任胜于能力演讲稿
2014/05/20 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书