[圖]關於YII中部件的使用詳解

對於每一個初學者來說,學習YII框架都會覺得很多迷茫和無從下手的時候,我也是從初學者過來的,在YII框架中,用的最多的莫過於部件的應用了,部件讓讓更多的代碼可重複,在頁面的任意位置都可以進行調用,非常的方便,我們接下來就來完成一個小型的部件功能開發吧。

首先我們來看下部件的效果圖吧:


本部件是基於YII自帶Demo的blog系統進行展示的,首先我們來看下文件結構:


上圖中紅線框中的就是部件的存放位置,extensions文件夾下一般都是以文件夾的形式來區分不同的部件命名空間,比如我這裏寫了個列表的部件,如果需要有view的話,也在部件的文件夾下新建views文件夾,在views下新建相應的php文件即可。

首先我們來看listExt/listwidet.php文件的代碼結構:

Yii::import ( 'zii.widgets.CPortlet' );
class Listwidet extends CPortlet {
	public $pagesize = 10;
	public function init() {
		$this->id = 'menuList';
		$this->title = '已存在的用戶列表';
		parent::init ();
	}
	public function renderContent() {
		$result = new CActiveDataProvider('User',array(
				'pagination'=> array(
						'pagesize'=>$this->pagesize,//這裏要傳參的,下面會講到
						),
				'sort'=>array('defaultOrder'=>'id asc')
				));
		$this->render ( 'listwidet', array (
				'userdata' => $result
		) );
	}
}
上面的代碼主要使用了CActiveDataProvider  詳細可以查看這裏的鏈接: http://www.yiichina.com/api/CActiveDataProvider


接着我們來看下listExt/views/listwidet.php 的代碼結構:

<ul>
<?php
$this->widget ( 'zii.widgets.grid.CGridView', array (
		'dataProvider' => $userdata,
		'columns' => array (
				'id',
				'username',
				array (
						'name' => 'email', 
						'type' => 'html', //默認爲text
						'value' => 'CHtml::mailto($data->email)',
						'htmlOptions' => array (
								'width' => 120,
								'style' => 'text-align:center;'//這裏的其實可以寫在css裏的
						)
				),
				array (
						'header' => '操作',
						'htmlOptions' => array (
								'width' => 150,
								'style' => 'text-align:center;'
						),
						'class' => 'CButtonColumn',
						'buttons' => array (
								'btnView' => array (
										'label' => '查看',
										'url' => 'array("/user/view/","id"=>$data->id)',
										'imageUrl' => false
								),
								'btnUpdate' => array (
										'label' => '修改',
										'url' => 'array("/user/update/","id"=>$data->id)',
										'imageUrl' => false
								),
								'btnDelete' => array (
										'label' => '刪除',
										'url' => 'array("/user/delete/","id"=>$data->id)',
										'imageUrl' => false
								)
						),
						'template' => '{btnView},{btnUpdate},{btnDelete}'
				)
		)
) );
?>
</ul>
上面的配置可能看起來有點複雜,不過我們來分解下:

首先email的列是比較特殊的,我們要配置此列顯示爲html的格式, 具體的請參考 http://www.yiichina.com/api/CDataColumn

接着我們最後自定義了一列,爲了顯示爲按鈕類,我們使用了class 爲 CButtonColumn 的列類型,具體請參考  http://www.yiichina.com/api/CButtonColumn


現在部件的內部工作代碼都寫好了,那我們應該怎麼調用呢,其實很簡單的一句話就可以搞定。


在需要調用的頁面的任意位置寫上下面的代碼:

<?php $this->widget('ext.listExt.listwidet',array('pagesize' => 5));?>

上面的代碼意思是調用此部件,同時傳入分頁的參數每頁顯示5條數據,下面的效果就出來了。


其實很簡單的。

當然如果更高級的部件開發就下次分享吧,部件中我們可以加入我們需要的資源,比如css、js、images等,還有如果有佈局的話,還可以加入layouts等等。


轉載請註明   來自Billy.lee  http://blog.csdn.net/qq415734794/article/details/7673278

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