编写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代码
Aug 08 PHP
php下载文件的代码示例
Jun 29 PHP
关于PHP session 存储方式的详细介绍
Jun 25 PHP
使用php清除bom示例
Mar 03 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
PHP实现适用于自定义的验证码类
Jun 15 PHP
PHP对象相关知识总结
Apr 09 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 PHP
php实现微信企业付款到个人零钱功能
Oct 09 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 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删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
Seajs源码详解分析
2019/04/02 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
浅谈Python 对象内存占用
2016/07/15 Python
python简易远程控制单线程版
2018/06/20 Python
python实现一组典型数据格式转换
2018/12/15 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
统计员岗位职责
2013/11/14 职场文书
管理信息系学生的自我评价
2014/01/11 职场文书
大学专科求职信
2014/07/02 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
抗洪救灾标语
2014/10/08 职场文书
学校运动会广播稿
2014/10/11 职场文书
2014年化验员工作总结
2014/11/18 职场文书
大连星海广场导游词
2015/02/10 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
Python内置数据结构列表与元组示例详解
2021/08/04 Python
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
TS 类型收窄教程示例详解
2022/09/23 Javascript