ThinkPHP的Widget扩展实例


Posted in PHP onJune 19, 2014

ThinkPHP的Widget扩展用于根据页面需要输出不同内容,它在项目目录中的Lib/Widget下定义。

具体定义如下:

class NewsListWidget extends Widget{
  public function render($data){
    // code...
  }
}

需要注意:

1.Widget是一个抽象类,其中有一个抽象方法(abstract)render,必须在子类中实现;
2.Widget的render方法必须使用return返回,而不是直接输出;
3.$data是传入Widget的参数。

然后我们可以在模板中直接调用这个Widget:

{:W('NewsList', array('tmpl' => 'a'))}

这里我传入了一个参数,这是比较常见的用法,Widget用来做什么?根据页面需要输出不同内容,这个不同内容,可以是数据不同,当然也可以是模板不同。

class NewsListWidget extends Widget{
  public function render($data){
    // code
    $news; // 这里可以是数据检索语句检索出来一个数据集
    $html = $this->renderFile($data['tmpl'], $news);
    return $html;
  }
}

这时候会自动渲染模板文件/Lib/Widget/NewsList/a.html的内容,并把$news传送过去,可以当普通模板文件处理,然后输出。

当然,还可以在Action控制器里面获取Widget的内容,进行二次加工。

$content = W('NewsList', array('tmpl' => 'a'), TRUE); // 第三个参数表示是否返回字符串,默认是FALSE,代表直接输出。

另外,ThinkPHP是MVC框架,请大家把数据检索相关的内容放在Model层

PHP 相关文章推荐
一个简易需要注册的留言版程序
Oct 09 PHP
Memcache 在PHP中的使用技巧
Feb 08 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
Sep 12 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
thinkphp3.2点击刷新生成验证码
Feb 16 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 PHP
Laravel 前端资源配置教程
Oct 18 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
ThinkPHP3.1的Widget新用法
Jun 19 #PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 #PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 #PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 #PHP
php定界符
Jun 19 #PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 #PHP
PHP两种去掉数组重复值的方法比较
Jun 19 #PHP
You might like
FleaPHP的安全设置方法
2008/09/15 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
原生JS轮播图插件
2017/02/09 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
python获取list下标及其值的简单方法
2016/09/12 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Django中的用户身份验证示例详解
2019/08/07 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
python中实现栈的三种方法
2020/12/19 Python
python中xlutils库用法浅析
2020/12/29 Python
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
我们是伦敦女孩:WalG
2018/01/08 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
师范生实习自我鉴定
2013/11/01 职场文书
个人简历自荐信
2013/12/05 职场文书
研发工程师岗位职责
2014/04/28 职场文书
教师演讲稿大全
2014/05/16 职场文书
小学生毕业评语
2014/12/26 职场文书
Redis性能监控的实现
2021/07/09 Redis
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android