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 相关文章推荐
PHP 文件上传功能实现代码
Jun 24 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
destoon实现调用图文新闻的方法
Aug 21 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
详解php的socket通信
Aug 11 PHP
PHP中的Session对象如何使用
Sep 25 PHP
PHP无限极分类函数的实现方法详解
Apr 15 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 PHP
Laravel框架路由管理简单示例
May 07 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 30 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
Yii分页用法实例详解
2014/12/04 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
Python中的urllib模块使用详解
2015/07/07 Python
python实现实时监控文件的方法
2016/08/26 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
2020/05/26 Python
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
.NET程序员的数据库面试题
2012/10/10 面试题
高中教师考核方案
2014/05/18 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
2014年节能工作总结
2014/12/18 职场文书
陕西导游词
2015/02/04 职场文书
经营场所证明范本
2015/06/19 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android
Python OpenCV之常用滤波器使用详解
2022/04/07 Python
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python