Yii之widget专题

关于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有两种写法 
Php代码   收藏代码
  1. /**********  方式一:  **********/  
  2. public function run() {  
  3.     //逻辑  
  4.     $this->render("fail_basic"array('summaryIdcs' => $summaryIdcs));  
  5. }  
  6.   
  7. /**********  方式二:  **********/  


3,实例  
例如,在表单创建时 
Java代码   收藏代码
  1. <?php $form=$this->beginWidget('CActiveForm', array(  
  2.     'id'=>'user-form',  
  3.     'enableAjaxValidation'=>false,  
  4.     'htmlOptions'=>array('enctype'=>'multipart/form-data'),  
  5. )); ?>  
  6. ..body content that may be captured by the widget...  
  7. <?php $this->endWidget(); ?>  
  8. //或  
  9. <?php $this->widget('path.to.WidgetClass'); ?>  



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

包括: 
    CBaseListView 
    CBreadcrumbs 
    CDetailView 
    CListView 
    CMenu 
    CPortlet 

例一, 
Php代码   收藏代码
  1. class testWidget extends CWidget  
  2. {      
  3.     public function init()  
  4.     {  
  5.         //当视图中执行$this->beginWidget()时候会执行这个方法  
  6.         //可以在这里进行查询数据操作  
  7.     }  
  8.    
  9.     public function run()  
  10.     {  
  11.         //当视图中执行$this->endWidget()的时候会执行这个方法  
  12.         //可以在这里进行渲染试图的操作,注意这里提到的视图是widget的视图  
  13.         //注意widget的视图是放在跟widget同级的views目录下面,例如下面的视图会放置在  
  14.         //  /protected/widget/test/views/test.php  
  15.         $this->render('test'array(  
  16.             'str'=>'WIDGET视图变量',  
  17.         ));  
  18.     }  
  19. }  


CPortlet是widget的一种,专门负责展示 
Php代码   收藏代码
  1. //在../components/RecentComments.php中  
  2.   
  3. Yii::import('zii.widgets.CPortlet');  
  4. class RecentComments extends CPortlet  
  5. {  
  6.     public $title='Recent Comments';  
  7.     public $maxComments=10;  
  8.   
  9.     public function getRecentComments()  
  10.     {  
  11.         return Comment::model()->findRecentComments($this->maxComments);  
  12.     }  
  13.   
  14.     protected function renderContent()  
  15.     {  
  16.         $this->render('recentComments');  
  17.     }  
  18. }  
  19.   
  20. //在../components/view/recentComments.php中  
  21. <ul>  
  22.     <?php foreach($this->getRecentComments() as $comment): ?>  
  23.     <li><?php echo $comment->authorLink; ?> on  
  24.         <?php echo CHtml::link(CHtml::encode($comment->post->title), $comment->getUrl()); ?>  
  25.     </li>  
  26.     <?php endforeach; ?>  
  27. </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

转自:http://blog.163.com/tb_hzx/blog/static/21479319120130102735874/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值