编写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编程语言开发动态WAP页面
Oct 09 PHP
生成静态页面的php函数,php爱好者站推荐
Mar 19 PHP
mysql 搜索之简单应用
Apr 27 PHP
PHP 第三节 变量介绍
Apr 28 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
php判断类是否存在函数class_exists用法分析
Nov 14 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
PHP中的一些常用函数收集
May 26 PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 PHP
laravel使用redis队列实例讲解
Mar 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保存session到memcache服务器的方法
2016/01/19 PHP
php数据访问之增删改查操作
2016/05/09 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
JavaScript 拾漏补遗
2009/12/27 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
javascript中的隐式调用
2018/02/10 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
python映射列表实例分析
2015/01/26 Python
Python Logging 日志记录入门学习
2018/06/02 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
使用python接入微信聊天机器人
2020/03/31 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
片区教研活动总结
2014/07/02 职场文书
业务员岗位职责
2015/02/03 职场文书
关于 Python json中load和loads区别
2021/11/07 Python
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫