`
zccst
  • 浏览: 3292032 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Yii之widget专题

    博客分类:
  • YII
 
阅读更多
作者: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


如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics