编写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和.net中des加解密的实现方法
Feb 27 PHP
浅谈php serialize()与unserialize()的用法
Jun 05 PHP
Linux下php5.4启动脚本
Aug 03 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
PHP7内核之Reference详解
Mar 14 PHP
php curl发送请求实例方法
Aug 01 PHP
php实例化一个类的具体方法
Sep 19 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
UCenter Home二次开发指南
2009/05/28 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
php cli换行示例
2014/04/22 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
python实现中文输出的两种方法
2015/05/09 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
python中字符串的操作方法大全
2018/06/03 Python
基于python实现名片管理系统
2018/11/30 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
python全栈开发语法总结
2020/11/22 Python
T3官网:头发造型工具
2019/12/26 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
工作检讨书500字
2014/10/19 职场文书
交通事故被告代理词
2015/05/23 职场文书
2016教师节问候语
2015/11/10 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
详解Python类和对象内容
2021/06/22 Python
Python集合的基础操作
2021/11/01 Python
Python与C++中梯度方向直方图的实现
2022/03/17 Python
实现GO语言对数组切片去重
2022/04/20 Golang