编写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通过COM使用ADODB的简单例子
Dec 31 PHP
set_include_path在win和linux下的区别
Jan 10 PHP
Zend Studio 无法启动的问题解决方法
Dec 04 PHP
用PHP将网址字符串转换成超链接(网址或email)
May 25 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
php实现删除空目录的方法
Mar 16 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
Laravel相关的一些故障解决
Aug 19 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
PHP 单引号与双引号的区别
2009/11/24 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php比较相似字符串的方法
2015/06/05 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
Python中bisect的用法
2014/09/23 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
python中的时区问题
2021/01/14 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
PHP如何防止SQL注入
2014/05/03 面试题
情人节活动策划方案
2014/02/27 职场文书
开业典礼主持词
2014/03/21 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA
从原生JavaScript到React深入理解
2022/07/23 Javascript