首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Yii之widget课题

2012-10-27 
Yii之widget专题作者:zccst关于widgets,他们在yii中的关系如下system.web.widgets系统自带最基本的widgetz

Yii之widget专题
作者:zccst

关于widgets,他们在yii中的关系如下
system.web.widgets  系统自带最基本的widget
zii.widgets  是基本扩展
zii.widgets.grid  是基本扩展的重要分支
zii.widgets.jui  是插件扩展

一,system.web.widgets
包括:
    CActiveForm
    CAutoComplete
    CClipWidget
    CContentDecorator
    CFilterWidget
    CFlexWidget
    CHtmlPurifier
    CInputWidget
    CMarkdown
    CMaskedTextField
    CMultiFileUpload
    COutputCache
    COutputProcessor
    CStarRating
    CTabView
    CTextHighlighter
    CTreeView
    CWidget

1,CWidget
批注:CWidget是所有Widget的基类。CWidget是自包含组件,可以看出是MVC的简略版,CWidget相比Controller,既没有actions,也没有filters。
实现细节可参考 CBaseController and CBaseController::widget.

CWidget
2,CWidget实例(右侧页面)
CWidget是components下一个独立的文件夹(路径是:../components/widgets/)
有自己的controller和views。其中controller继承自CWidget,习惯命名为XXWidget.php(XXWidget extends CWidget)。

XXWidget.php有两种写法

/**********  方式一:  **********/public function run() {    //逻辑    $this->render("fail_basic", array('summaryIdcs' => $summaryIdcs));}/**********  方式二:  **********/


3,实例
例如,在表单创建时
<?php $form=$this->beginWidget('CActiveForm', array('id'=>'user-form','enableAjaxValidation'=>false,'htmlOptions'=>array('enctype'=>'multipart/form-data'),)); ?>..body content that may be captured by the widget...<?php $this->endWidget(); ?>//或<?php $this->widget('path.to.WidgetClass'); ?>



二,zii.widgets
默认情况下, widget 的视图文件位于包含了widget文件的 views 子目录之下。这些视图可以通过调用 CWidget::render()渲染,这一点和控制器很相似。唯一不同的是,widget的视图没有布局文件支持。
同时,view 文件中的 $this 指的是widget 实例而不是 controller 实例。

包括:
    CBaseListView
    CBreadcrumbs
    CDetailView
    CListView
    CMenu
    CPortlet

例一,
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视图变量',        ));    }}


CPortlet是widget的一种,专门负责展示
//在../components/RecentComments.php中Yii::import('zii.widgets.CPortlet');class RecentComments extends CPortlet{public $title='Recent Comments';public $maxComments=10;public function getRecentComments(){return Comment::model()->findRecentComments($this->maxComments);}protected function renderContent(){$this->render('recentComments');}}//在../components/view/recentComments.php中<ul><?php foreach($this->getRecentComments() as $comment): ?><li><?php echo $comment->authorLink; ?> on<?php echo CHtml::link(CHtml::encode($comment->post->title), $comment->getUrl()); ?></li><?php endforeach; ?></ul>


三,zii.widgets.grid
    CButtonColumn
    CCheckBoxColumn
    CDataColumn
    CGridColumn
    CGridView
    CLinkColumn


四,zii.widgets.jui
    CJuiAccordion
    CJuiAutoComplete
    CJuiButton
    CJuiDatePicker
    CJuiDialog
    CJuiDraggable
    CJuiDroppable
    CJuiInputWidget
    CJuiProgressBar
    CJuiResizable
    CJuiSelectable
    CJuiSlider
    CJuiSliderInput
    CJuiSortable
    CJuiTabs
    CJuiWidget


热点排行