1.构建自己的widget testWidget.php
在目录 /protected/widget/test/testWidget.php
<?php
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视图变量',
));
}
}
2.创建对应的widget view
/protected/widget/test/views/test.php
<?php
echo $str;
3.调用自定义的widget
<div class="msg">
<?php echo CHtml::encode($message); ?>
</div>
自定义widget开始
<div>
<?php
$this->beginWidget('application.widget.test.testWidget');
?>
</div>
<?php $this->endContent(); ?>
</br>自定义widget结束</br>
<hr>
<?php
Yii::import('application.mylib.MyTestClass');
echo Yii::app()->controller->id;
echo '<hr>';
echo MyTestClass::getName();
?>
ps:
在控制器render视图的时候,如果不想用默认的layout,可以直接使用如下方式
$this->renderPartial('test',array());
要创建一个新的挂件(widget),我们主要是要继承两个方法:CWidget::init()和 CWidget::run(),
CWidget::init 调用是发生在我们使用 $this->beginWidget 将挂件插入到一个view里面,
CWidget::run 调用是发生在我们使用 $this->endWidget 这个方法的时候。
如果我们想捕捉和处理两者之间的方法核查办上显示的内容,我们可以在CWidget::init开始输出缓冲,然后在CWidget::run中检索缓冲输出 并作进一步处理。