编写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 相关文章推荐
WINXP下apache+php4+mysql
Nov 25 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
Apr 24 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 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 sprintf()函数用例解析
2011/05/18 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
JS验证字符串功能
2017/02/22 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
浅谈node模块与npm包管理工具
2018/01/03 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python编写百度贴吧的简单爬虫
2015/04/02 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
大型车展策划方案
2014/02/01 职场文书
社区母亲节活动方案
2014/03/05 职场文书
家电业务员岗位职责
2014/03/10 职场文书
精神文明建设标语
2014/06/16 职场文书
承诺函范文
2015/01/21 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
工作感言一句话
2015/08/01 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python