有时候,我们需要自己去定义一些widgets,比如:项目中用到了extjs。如何使用呢?
关于widgets,他们在yii中的关系如下 :
system.web.widgets 系统自带最基本的widget
zii.widgets 是基本扩展
zii.widgets.grid 是基本扩展的重要分支
zii.widgets.jui 是插件扩展
主要说说这一部分:system.web.widgets
1,CWidget批注:CWidget是所有Widget的基类。CWidget是自包含组件,可以看出是MVC的简略版,CWidget相比Controller,既没有actions,也没有filters。
实现细节可参考 CBaseController and CBaseController::widget.
2,CWidget实例
CWidget是components下一个独立的文件夹(路径是:../components/widgets/)
有自己的controller和views。其中controller继承自CWidget,习惯命名为XXWidget.php(XXWidget extends CWidget)。
看看怎么使用它:
1. 调用Widget
- <?php $this->widget('WidgetName'); ?>
- <?php $widget=$this->beginWidget('path.to.WidgetClass'); ?>
- ...可能会由小物件获取的内容主体...
- <?php $this->endWidget(); ?>
- <?php $userId = 1; ?>
- <?php $this->widget('WidgetName',array('userId'=>$userId)); ?>
/**
* test widget
*/
class testWidget extends CWidget
{
public function init()
{
//当视图中执行$this->beginWidget()时候会执行这个方法
//可以在这里进行查询数据操作
}
public function run()
{
//当视图中执行$this->endWidget()的时候会执行这个方法
//可以在这里进行渲染试图的操作,注意这里提到的视图是widget的视图
//注意widget的视图是放在跟widget同级的views目录下面,例如下面的视图会放置在
// /components/widgets/test/views/test.php
$this->render('test', array(
'str'=>'WIDGET视图变量',
));
}
}
最近刚接触YII,EXTJS。想要他们结合得很好,那有得研究了。加油吧,各位!