编写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 MySQL与分页效率
Jun 04 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
使用CodeIgniter的类库做图片上传
Jun 12 PHP
Laravel框架中扩展函数、扩展自定义类的方法
Sep 04 PHP
php实现的验证码文件类实例
Jun 18 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
Yii2.0预定义的别名功能小结
Jul 04 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 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中模拟POST传递数据的两种方法分享
2011/09/16 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python中count函数简单的实例讲解
2020/02/06 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
2014离婚协议书范文两篇
2014/09/15 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python
MySQL索引失效场景及解决方案
2022/07/23 MySQL