ThinkPHP3.0完全开发手册
Widget扩展用于在页面根据需要输出不同的内容,Widget扩展的定义是在项目的Lib\Widget目录下面定义Widget类库,例如下面定义了一个用于显示最近的评论的Widget:
位于Lib\Widget\ShowCommentWidget.class.php
Widget类库需要继承Widget类,并且必须定义render方法实现,例如:
T
class
ShowCommentWidget
extends
Widget
{
T
T
public function
render
($data){
T
T
return
T
'这是最新的评论信息'T;
T
T
}
T
T
}
render方法必须使用return返回要输出的字符串信息,而不是直接输出。
Widget也可以调用Widget类的renderFile方法,渲染模板后进行输出,。
T
class
ShowCommentWidget
extends
Widget
{
T
T
public function
render
($data){
T
$content
=
T
$this->renderFileT(
T
'Article:comment',T$data);
T
return
$content
;
T
T
}
T
T
}
定义好Widget类库后,只需要做的是在模板文件里面使用W方法调用Widget,例如
{:W('ShowComment')}
通常Widget都有自己的调用参数来决定不同的输出内容
{:W('ShowComment',array('count'=>5))}
参数必须使用索引数组传入。
如果使用了renderFile方法调用了模板,那么在模板中就可以使用:
{$count} 来输出w方法传入的变量。
如果w方法传入的数据是
array('id'=>5,'name'=>'thinkphp')
那么widget模板中就可以输出id和name两个变量。
可以理解成W方法传入的参数是
array('模板变量1'=>值1,'模板变量2'=>'值2'…)
注意:模板中的变量由renderFile方法的var变量决定 ,并非取决于W方法传入的参数,render方法本身可以对W方法传入的参数进行处理后传给renderFile方法,尽管大多数情况下都是直接传入data变量到renderFile方法中去。
在控制器里面也可以调用Widget类进行输出,在Action里面获取动态的Widget内容,可以使用下面的方式:
T
$content
=
T
WT(
T
'ShowComment', array('count'=>5),trueT);
第三个参数表示是否返回字符串,如果是false就表示直接输出。返回值可以用于其他用途。