编写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 相关文章推荐
第七节 类的静态成员 [7]
Oct 09 PHP
PHP 图片文件上传实现代码
Dec 29 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
PHP文件上传原理简单分析
May 29 PHP
基于php缓存的详解
May 15 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
php实现用户登陆简单实例
Apr 04 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
基于php编程规范(详解)
Aug 17 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
浅析PHP echo 和 print 语句
Jun 30 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的QRcode类与大家分享
2011/11/13 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
Python3中的2to3转换工具使用示例
2015/06/12 Python
python实现多线程的两种方式
2016/05/22 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
python中的print()输出
2019/04/12 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
雷锋观后感
2015/06/10 职场文书
河童之夏观后感
2015/06/11 职场文书
听证会主持词
2015/07/03 职场文书
导游词之西安骊山
2019/12/03 职场文书