ThinkSNS-公共Widget
导航: 上一页
Widget 扩展用于在页面根据需要输出不同的内容,Widget 扩展的定义是在项目的Lib\Widget 目录下面定义Widget 类库,例如用于显示最近的评论的Widget
ShowCommentWidget.class.php Widget 类库需要继承Widget 类,并且必须定义render 方法实现.
例如:
class ShowCommentWidget extends Widget{ public function render($data){ return '这是最新的'.$data['count'].'条评论信息'; } }
render 方法必须使用return 返回要输出的字符串信息,而不是直接输出。Widget 也可以调用Widget 类的renderFile 方法,渲染模板后进行输出,。
class ShowCommentWidget extends Widget{ public function render($data){ $content = $this->renderFile('Article:comment',$data); return $content; } }
定义好Widget 类库后,只需要做的是在模板文件里面使用W 方法调用Widget.
例如{:W('ShowComment')}
通常Widget 都有自己的调用参数来决定不同的输出内容 {:W('ShowComment',array('count'=>5))}
参数必须使用索引数组传入。在控制器里面也可以调用Widget 类进行输出,在Action 里面获取动态的Widget内容,可以使用下面的方式:$content = W('ShowComment', array('count'=>5),true);
第三个参数表示是否返回字符串,如果是false 就表示直接输出。返回值可以用于其他用途。
- 先看是如何调用的
在某个应用的模板中加入这句话 {:WW('Pub_ShowComment',array('xxx'=>"public1-widget"))}即可调用公共Widget: "Pub_ShowComment" 插件.这样到时输出的时候,这块就会显示:public--->public1-widget.
- 那么公共的插件放在哪个目录,又有什么命名规则呢?
公共插件的统一目录是PUBLIC/Widget 下,比如上个例子要调用的插件,Pub_ShowCommentWidget.class.php 中的内容如下:
<?php class Pub_ShowCommentWidget extends Widget{ public function render($data){ $content = $this->Pub_renderFile('public1',$data); return $content; } } ?>
然后public1.html 的内容如下:<p style="padding-left:60px">public--->{$xxx}</p>
需要注意的是命名规则:类名必须以Pub_开头,输出函数必须用Pub_renderFile函数,而不是ThinkPHP1.6 核心默认的renderFile 函数