编写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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
实用函数7
Nov 08 PHP
php5中类的学习
Mar 28 PHP
swfupload 多文件上传实现代码
Aug 27 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
PHP Streams(流)详细介绍及使用
May 12 PHP
php如何连接sql server
Oct 16 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 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
无线电广播的开始
2002/01/30 无线电
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
php简单提示框alert封装函数
2010/08/08 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
smarty简单分页的实现方法
2014/10/27 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
在Python中使用元类的教程
2015/04/28 Python
python框架django基础指南
2016/09/08 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
Python入门_浅谈for循环、while循环
2017/05/16 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
《世界多美呀》教学反思
2016/02/22 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
Python MNIST手写体识别详解与试练
2021/11/07 Python
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript