多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Widget扩展 [上一页](148.html "上一页")[下一页](150.html "下一页") Widget扩展用于在页面根据需要输出不同的内容,Widget扩展的定义是在项目的Lib/Widget目录下面定义Widget类库,例如下面定义了一个用于显示最近的评论的Widget,位于Lib/Widget/ShowCommentWidget.class.php。 Widget类库需要继承Widget类,并且必须定义render方法实现,例如:`classShowCommentWidgetextendsWidget{<br class="calibre5"></br>publicfunctionrender($data){<br class="calibre5"></br>return '这是最新的评论信息';<br class="calibre5"></br>} <br class="calibre5"></br>}`render方法必须使用return返回要输出的字符串信息,而不是直接输出。 Widget也可以调用Widget类的renderFile方法,渲染模板后进行输出。`classShowCommentWidgetextendsWidget{<br class="calibre5"></br>    publicfunctionrender($data){ <br class="calibre5"></br>        $content = $this->renderFile('comment',$data);<br class="calibre5"></br>      return $content;<br class="calibre5"></br>   } <br class="calibre5"></br>}`定义好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内容,可以使用下面的方式:`$content = W('ShowComment', array('count'=>5),true);`第三个参数表示是否返回字符串,如果是false就表示直接输出。返回值可以用于其他用途。 Widget的模板文件单独存放,放置到当前项目的Lib/Widget/ShowComment/目录下面,取决于rendFile方法如何调用,默认情况下,是调用和widget同名的模板文件,例如当前Widget是ShowCommentWidget,其中代码如下:`$this->renderFile();`则调用的widget模板位于 Lib/Widget/ShowComment/ShowComment.html, 如果调用`$this->renderFile('comment');`调用的widget模板则位于 Lib/Widget/ShowComment/comment.html, 如果需要调用子目录下面的模板,则采用`$this->renderFile('article/comment');`调用的widget模板则位于 Lib/Widget/ShowComment/article/comment.html。 [上一页](148.html "上一页")[下一页](150.html "下一页")