Yii之widget

關於widgets,他們在yii中的關係如下 
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 實例。 
包括: 
  •     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(); ?>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章