编写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语法(5)
Oct 09 PHP
php 字符转义 注意事项
May 27 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
PHP调用其他文件中的类
Apr 02 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
php中的钩子理解及应用实例分析
Aug 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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
JS动画效果代码3
2008/04/03 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
jquery处理json对象
2014/11/03 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
Python配置mysql的教程(推荐)
2017/10/13 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
python针对excel的操作技巧
2018/03/13 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
如何开启linux的ssh服务
2013/06/03 面试题
电子商务毕业生求职信
2013/11/10 职场文书
单位工作证明格式模板
2014/10/04 职场文书
门卫岗位职责
2015/02/09 职场文书
新郎结婚保证书
2015/02/26 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python