ThinkPHP中Widget扩展的两种写法及调用方法详解


Posted in PHP onMay 04, 2017

本文实例讲述了ThinkPHP中Widget扩展的两种写法及调用方法。分享给大家供大家参考,具体如下:

Widget扩展一般用于页面组件的扩展,在页面根据需要输出不同的内容,下面介绍一下ThinkPHP中Widget的两种写法及调用

写法一:

ArticlWidget.class.php文件:

class ArticleWidget extends Widget {
  /**
   *
   * @param array $data
   * @return type
   * 调用方法:{:W('ArticleList',array('cid'=>25,'limit'=>5))}
   * cid为分类id,limit为调用数量
   */
  public function render($data) {
    $Article = M('Article');
    $articleMap["cid"] = $data["cid"];
    $data["articleList"] = $Article->where($articleMap)->order('id desc')->limit($data["limit"])->select();
    foreach ($articleList as $key => $value) {
      if ($value["thumbnail"] == "") {
        $data["articleList"][$key]["thumbnail"] = '/Public/Img/Common/noThumbnail.jpg';
      }
    }
    return $this->renderFile('articleList', $data);
  }
}

模板文件articleList.html在Lib/Widget/Article目录下

<volist name="articleList" id="articleList_vo">
  <li>
    <a href="__APP__/Channel/articleDetail/code/article/id/{$articleList_vo.id}" rel="external nofollow" title="{$articleList_vo.title}">{$articleList_vo.title}</a>
  </li>
</volist>

写法二:

class ArticleWidget extends Action {
  /**
   *
   * @param array $data
   * @return type
   * 调用方法:{:R('Article/articleList',array('cid'=>25,'limit'=>5),'Widget')}
   * cid为分类id,limit为调用数量
   */
  public function articleList($cid, $limit) {
    $Article = M('Article');
    $articleMap["cid"] = $cid;
    $data = $Article->where($articleMap)->order('id desc')->limit($limit)->select();
    foreach ($data as $key => $value) {
      if ($value["thumbnail"] == "") {
        $data[$key]["thumbnail"] = '/Public/Img/Common/noThumbnail.jpg';
      }
    }
    $this->assign('articleList', $data);
    $this->display('Widget:articleList');
  }
}

模板文件articleList.html,内容同写法一,但放在Tpl/风格名/Widget/目录下

如果模板文件放在ArticleWiget.class.php文件所在目录的Article文件夹下,则写法如下:

$this->display(dirname(__FILE__) . '/Article/articleList.html');

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

PHP 相关文章推荐
上传多个文件的PHP脚本
Nov 26 PHP
mayfish 数据入库验证代码
Apr 30 PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
浅谈PHP的反射机制
Dec 15 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
php实现微信企业转账功能
Oct 02 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 #PHP
PHP调用Mailgun发送邮件的方法
May 04 #PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 #PHP
Yii2数据库操作常用方法小结
May 04 #PHP
Yii2中添加全局函数的方法分析
May 04 #PHP
Yii2表单事件之Ajax提交实现方法
May 04 #PHP
PHP经典实用正则表达式小结
May 04 #PHP
You might like
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
详解php中的implements 使用
2017/06/13 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
js实现返回顶部效果
2017/03/10 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python中的super用法详解
2015/05/28 Python
Python深入06——python的内存管理详解
2016/12/07 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
PHP面试题大全
2015/10/16 面试题
关于逃课的检讨书
2014/01/23 职场文书
社区道德讲堂实施方案
2014/03/21 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫
python神经网络ResNet50模型
2022/05/06 Python
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python