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}" 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中Widget的两种写法及调用的更多相关文章

  1. asp.net中过滤器的两种写法

    1.写在一个单独的类库中在web.config中进行配置 <httpModules> <add name="" type="类的全名称,程序集的名称&q ...

  2. JS中Class的两种写法

    写法一:使用函数: var ClassName = function() { this.message = 'dat.gui'; this.speed = 0.8; this.displayOutli ...

  3. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  4. EF架构~linq模拟left join的两种写法,性能差之千里!

    回到目录 对于SQL左外连接我想没什么可说的,left join将左表数据都获出来,右表数据如果在左表中不存在,结果为NULL,而对于LINQ来说,要实现left join的效果,也是可以的,在进行j ...

  5. 快速排序partition过程常见的两种写法+快速排序非递归实现

    这里不详细说明快速排序的原理,具体可参考here 快速排序主要是partition的过程,partition最常用有以下两种写法 第一种: int mypartition(vector<int& ...

  6. java 路径分隔符File.separator 以及 路径两种写法"/"和"\\"

    一.File.separator File file=new File(); 这句是新建一个文件.file.separator这个代表系统目录中的间隔符,说白了就是斜线,不过有时候需要双线,有时候是单 ...

  7. iOS中表视图单元格事件用nib和storyboard的两种写法总结

    从ios6开始,苹果公司推出了storyborad技术取代了nib的写法,这样代码量确实少写了很多,也比较简洁.但是,从学习的角度来说,阿堂认为 用nib的写法,虽然多了些代码,但是对于掌握知识和原理 ...

  8. es6对象内函数的两种写法

    es6对象内函数一般有两种写法: var person1 = { name: "p1", sayThis() { console.log(this); } }; var perso ...

  9. 关于MyBatis的两种写法

    刚接触MyBatis是在Jike的视频中学习的,但是之后又发现和项目中的MyBatis的用法不太一致.上网找了好多资料,发现网上的教程分为两种写法: 第一种,是jike视频中的写法,写好map.xml ...

随机推荐

  1. C++ 智能指针详解(转)

    C++ 智能指针详解   一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常 ...

  2. dr-helper项目设计介绍(一个包括移动端和Web端的点餐管理系统)

    一.源代码路径 https://github.com/weiganyi/dr-helper 二.界面 通过浏览器訪问Web服务,能够看到界面例如以下: ADT-Bundle编译project生成dr- ...

  3. 【Excle数据透视表】如何在数据透视表顶部显示列总计数据

    解决方案 创建组并修改组名称为“合计” 如下图:原始数据透视表 步骤 选中列标签区域→右键→组合 修改组合的名称为“合计” 此时底部会有一个合计汇总项,只需要单击数据透视表任意单元格→数据透视表工具→ ...

  4. jQuery.delegate() 函数详解

    delegate()函数用于为指定元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 即使是执行delegate()函数之后新添加的元素,只要它符合条件,绑定 ...

  5. 微博,and java 多线程编程 入门到精通 将cpu 的那个 张振华

    http://down.51cto.com/data/2263476  java 多线程编程 入门到精通  将cpu 的那个 张振华 多个用户可以同时用一个 vhost,但是vhost之间是隔离的. ...

  6. js获取时间查并实现倒计时读条

    <script type="text/javascript"> $().ready(function () {// 每增加一个切换,就要增加一行,tab1不变,其他的都 ...

  7. php 记录图片浏览次数次数

    <?php $url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; $la ...

  8. 使用PostMan快速生成代码

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.关于PostMan的下载和使用网上有很多相关的博客介绍,本文主要介绍PostMan在进行模拟Http请求后可以根据需要的 ...

  9. Mac下配置mnmp环境

    虽然比较喜欢玩下新语言, 但是php还是常会用到的. lnmp很多人都听过, 但是不能用在Mac上面, 另外还有个mnpp但在osx 10.8.3下面跑不起来.所以自己手动一步步安装, 整理了方便安装 ...

  10. eclipse 创建maven web错误Cannot change version of project facet Dynamic web module to 3.1解决方案

    Dynamic Web Module 选择“3.1”,java选择“1.8”,报错:Cannot change version of project facet Dynamic web module ...