簡述Yii 的CGridView如何使用及怎麼用model的search搜索
Yii的CGridview掛件可以自動生成數據列表,很適合在後臺管理頁面使用。
但Yii的文檔還是很缺乏,只能在 class reference 中找到一些簡單的說明,可並不直觀。在這裏總結下CGridview的用法。
在模板頁面中,可以這樣來使用CGridview:
01
$this->widget('zii.widgets.grid.CGridView', array(
02
'dataProvider'=>$dataProvider,
03
04
'selectableRows' => true,
05
06
//'selectionChanged' => '',
07
08
//'emptyText' => 'it is empy',
09
10
//'actionPrefix' => '', //作用還不明確
11
12
//'ajaxVar'=>'', //作用還不明確
13
14
//ajaxUpdate => true,
15
16
//'beforeAjaxUpdate' => '', //作用還不明確
17
18
//afterAjaxUpdate => 'string', //作用還不明確
19
20
//'enablePagination' => true,
21
22
//'enableSorting' => true,
23
//'hasFooter' => true,
24
25
//'hiddenHeader' => false,
26
27
//'pager'=>'',
28
'columns'=>array(
29
'title', // display the 'title' attribute
30
'category.name', // display the 'name' attribute of the 'category' relation
31
'content:html', // display the 'content' attribute as purified HTML
32
array( // display 'create_time' using an expression
33
'name'=>'create_time',
34
'value'=>'date("M j, Y", $data->create_time)',
35
),
36
array( // display 'author.username' using an expression
37
'name'=>'authorName',
38
'value'=>'$data->author->username',
39
),
40
array( // display a column with "view", "update" and "delete" buttons
41
'class'=>'CButtonColumn',
42
),
43
),
44
));
dataProvider參數:
接收來自CActiveDataProvider的數組,每個數組元素都是一個當前table的model。
gii自動生成的Model類中自帶一個search()方法,rules()方法的規則數組中最後一個規則也是和search有關的,這些是爲了方便在controller中對數據進行篩選或者說搜索,而CGridview正可以利用Model的這些特性。dbProvider接收的值可以直接是:
'dataProvider'=>$model->search()
一個簡單的例子:
controller的方法
01
function actionList()
02
{
03
04
$model = new Member('search');
05
06
if(isset($_GET['Member']))
07
08
{
09
10
$model->attributes = $_GET['Member'];
11
12
}
13
14
$this->render('list',array('model'=>$model));
15
16
}
view視圖的內容
01
<html>
02
03
<head></head>
04
05
<body>
06
07
<?php
08
09
$this->widget('zii.widgets.Grid.CGridView',array(
10
11
'dataProvider' => $model->search(),
12
13
'filter' => $model,
14
15
'filterPosition' => 'header', //
16
17
'columns' => array(
18
19
'name',
20
21
'email',
22
23
),
24
25
));
26
27
?>
28
29
</body>
30
31
</html>
視圖中CGridview的參數filter,他的值應該是當前table的Model,如果filter獲得了賦值,則這個CGridview可以對數據進行篩選搜索了;filterPosition可以有三個值,header/body/footer,用來控制字段的搜索輸入框顯示在列的頭部、中部還是尾部,如果爲空,則不會顯示系統自帶的這個搜索輸入框。說實話CGridview自帶的這個輸入框有點太不人性化了,一點也不像常見搜索表單,所以我建議不要顯示系統自帶的搜索框,而是自行寫一個搜索框,最簡單像這樣:
01
<input type="text" name="Member[name]" id="Member_id">
02
03
<input type="button" value="搜索" οnclick="submitSearch('<?=url($this->route)?>','Member','name')">
04
05
<script type="text/javascript">
06
07
function submitSearch(url,model,id)
08
09
{
10
11
var value = document.getElementById(model+'_'+id).value;
12
13
document.location.href = url + '&' + model + '['+ id + ']=' + value;
14
15
}
16
17
</script>
如果還要實現ajax的功能可以自行對代碼進行一些小修改即可。
emptyText參數
當一條數據也沒有獲取到時,就會顯示這個參數設定的提示信息,如“沒有找到任何數據”
ajaxUpdate參數:
是否啓用CGridview的ajax操作效果,如果設爲true,刪除、排序這些操作會自動以ajax方式來實現
enablePagination 參數
是否啓用分頁
enableSoring 參數
是否啓用數據排序功能
hasFooter 參數
CGridview的表格是否有腳部
hiddenHeader 參數
是否隱藏CGridview表格的頭部
pager參數
pager類顯示時用到的參數
selectableRows參數
是否在每行數據行首顯示一個checkbox以及一個全選checkbox
selectionChanged參數
當數據選中狀態變化後要調用執行的js函數
showTableOnEmpty參數
當沒有數據時,是否顯示CGridview表格
summaryText參數
顯示的摘要信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.