thinkPHP下的widget扩展用法实例分析


Posted in PHP onDecember 26, 2015

本文实例讲述了thinkPHP下的widget扩展用法。分享给大家供大家参考,具体如下:

Widget扩展用于在页面根据需要输出不同的内容,Widget扩展的定义是在项目的Lib\Widget目录下面定义Widget类库,例如下面定义了一个用于显示最近的评论的Widget:

位于Lib\Widget\ShowCommentWidget.class.php

Widget类库需要继承Widget类,并且必须定义render方法实现,例如:

render方法必须使用return返回要输出的字符串信息,而不是直接输出。

Widget也可以调用Widget类的renderFile方法,渲染模板后进行输出。

在项目的lib目录下建立widget目录,与action目录同级。

建立TestWidget.class.php:

class TestWidget extends Widget{
  public function render($data){
    //print_r($data);
    $data['id']=$data['id'];
    $data['info']=$data['info'];
    $content = $this->renderFile('index',$data);
    //print_r($content);
    return $content;
  }
}

在此目录下建立对应的Test文件夹,下面放$this->rendFile调用的html页面。

index.html  通过使用循环显示数据的信息

<div>
  这是widget调用的模板页面
  <foreach name="id" item="vo"> <span style="color:#ff0000">//注意:id对应与$data的键值</span>
    {$vo}
  </foreach>
  <br>
  <foreach name="info" item="vo"> <span style="color:#ff0000">//info对应于$data的键值</span>
    <foreach name="vo" item="v">
      {$v}
    </foreach>
  </foreach>
</div>

action方法:

IndexAction.class.php

代码如下:

class TestAction extends Action{
  public function index(){
    $info=array(array("1","AA","title"),array("2","BB","title2"));
    $this->assign("info",$info);
    $this->display();
  }
}

action调用的tpl中的html页面的为index.html

代码如下:

<div>
这个是test调用的action<br>
{:W('Test',array("id"=>array("ID","name","title"),"info"=>$info))} <span style="color:#cc0000">//传递给TestWidget.class.php 的参数,要以array格式传递</span>
</div>

运行IndexAction.class.php

页面显示如下:

thinkPHP下的widget扩展用法实例分析

这样就把show.html中的内容包含进来了

name什么时候用widgte呢?

widget通常是一些封装好了的JS效果组件,直接调用‘加入参数就可以得到一些效果,例如,TAB菜单、旋转木马、图片轮播等交互效果 

比如网站的菜单栏。右边常不更新的栏目之类的…

方便多次调用,比如在页面上左侧显示一个新闻列表,每个页面如果都调用这个列表,是不是得在每个控制器里写一遍相同的代码,不累么,用widget可能只需要写一次,然后模板中多次使用

希望本文所述对大家基于thinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php 设计模式之 工厂模式
Dec 19 PHP
PHP 基本语法格式
Dec 15 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
Jun 15 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
PHP实现的日历功能示例
Sep 01 PHP
Yii2处理密码加密及验证的方法
May 12 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 PHP
php中array_fill函数的实例用法
Mar 02 PHP
thinkPHP下ueditor的使用方法详解
Dec 26 #PHP
thinkPHP中分页用法实例分析
Dec 26 #PHP
thinkPHP中验证码的简单使用方法
Dec 26 #PHP
分享50个提高PHP执行效率的技巧
Dec 26 #PHP
PHP获取二维数组中某一列的值集合
Dec 25 #PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 #PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 #PHP
You might like
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
JS分页效果示例
2013/10/11 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
Python中join和split用法实例
2015/04/14 Python
Python ftp上传文件
2016/02/13 Python
Python之父谈Python的未来形式
2016/07/01 Python
Python金融数据可视化汇总
2017/11/17 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
Python基于template实现字符串替换
2020/11/27 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
高三自我评价
2014/02/01 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python
Golang ort 中的sortInts 方法
2022/04/24 Golang