关于widgets,他们在yii中的关系如下
1.system.web.widgets 系统自带最基本的widget
2.zii.widgets 是基本扩展
3.zii.widgets.grid 是基本扩展的重要分支
调用代码
1.system.web.widgets 系统自带最基本的widget
2.zii.widgets 是基本扩展
3.zii.widgets.grid 是基本扩展的重要分支
4.zii.widgets.jui 是插件扩展
一,system.web.widgets 包括:
- CActiveForm
- CAutoComplete
- CClipWidget
- CContentDecorator
- CFilterWidget
- CFlexWidget
- CHtmlPurifier
- CInputWidget
- CMarkdown
- CMaskedTextField
- CMultiFileUpload
- COutputCache
- COutputProcessor
- CStarRating
- CTabView
- CTextHighlighter
- CTreeView
- CWidget
二,zii.widgets
默认情况下, widget 的视图文件位于包含了widget文件的 views 子目录之下。这些视图可以通过调用 CWidget::render()渲染,这一点和控制器很相似。唯一不同的是,widget的视图没有布局文件支持。
同时,view 文件中的 $this 指的是widget 实例而不是 controller 实例。
包括:
默认情况下, widget 的视图文件位于包含了widget文件的 views 子目录之下。这些视图可以通过调用 CWidget::render()渲染,这一点和控制器很相似。唯一不同的是,widget的视图没有布局文件支持。
同时,view 文件中的 $this 指的是widget 实例而不是 controller 实例。
包括:
- CBaseListView
- CBreadcrumbs
- CDetailView
- CListView
- CMenu
- CPortlet
三,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
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>
自定义Widget类以及调用
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视图变量',
));
}
}
调用代码
<?php $this->beginWidget('application.Widget.testWidget'); ?>
<?php $this->endWidget(); ?>