Yii 之widget
默认情况下, widget 的视图文件位于包含了widget文件的 views 子目录之下。这些视图可以通过调用 CWidget::render()渲染,这一点和控制器很相似。唯一不同的是,widget的视图没有布局文件支持。
同时,view 文件中的 $this 指的是widget 实例而不是 controller 实例。
一.创建Widget
class testWidget extends CWidget
{
public function init()
{
//当视图中执行$this->beginWidget()时候会执行这个方法
//可以在这里进行查询数据操作
}
public function run()
{
//当视图中执行$this->endWidget()的时候会执行这个方法
//可以在这里进行渲染试图的操作,注意这里提到的视图是widget的视图
//注意widget的视图是放在跟widget同级的views目录下面,例如下面的视图会放置在
// /protected/widget/test/views/test.php
$this->render('test', array(
'str'=>'WIDGET视图变量',
));
}
}
二.Widget的视图文件
views视图test.php 引用此变量数据
...
<?php echo $str;?>
....
三.在controll中的views视图中 调用Widget
如果你在/protected/widget/test/下建立了一个名为“testWidget.php”的widget。
在视图中调用需要这样写:
A.
<?php $this->widget('WidgetName'); ?>
B.
<?php $this->beginWidget('application.widget.test.testWidget'); ?>
...可能小部件需要用到这里主体内容...
<?php $this->endWidget(); ?>
C.
<?php $userId = 1; ?>
<?php $this->widget('WidgetName',array('userId'=>$userId)); ?>
参数userId自动映射到Widget类的同名属性,所以在定义Widget时,别忘记了声明该属性。