yii裡面dao資料導出的資料給ClistView使用
測試表tbl_student
字段id,username,sex,age
action裡面測試
*****************************************************************
$sql = 'select * from tbl_student';
$conn = Yii::app()->db;
$rawData = $conn->createCommand($sql)->queryAll();
/*
這裡後面的array參數是可選,用來設定排序和分頁情況
$dataProvider= new CArrayDataProvider($rawData, array(
'id'=>'id',
'sort'=>array(
'attributes'=>array(
'id','username','age','sex'
), ),
'pagination'=>array(
'pageSize'=>10,
),));
*/
$dataProvider= new CArrayDataProvider($rawData);
//這裡是原來的active record模型
//$dataProvider=new CActiveDataProvider('Student');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
*****************************************************************
index.php頁面如下:
$this->widget('zii.widgets.CListView', array(
'itemView'=>'_view',
));
理論上就可以了,但是實際上能看到,我們要的資料看不到,問題在CListView的itemView裡面
gii幫我們生成的一般是這樣:echo CHtml::encode($data->getAttributeLabel('id'));
用ar模型在這裡下斷點的時候,就能看到$data是一個object,而我們自己采用sql來查詢的話,沒有object的概念,$data是array,
是以,我們隻要改成echo CHtml::encode($data['id']);
類似這樣把itemView修改一下就完成了自己sql查詢出來的資料到yii的CListView
很可惜,CDetailView沒有itemView這個屬性,暫時沒研究出來怎麼簡單點把sql出來的資料放進他們裡面去,
CGridView的dataProvider隻要是實作了IDataProvider就可以,是以也可以實作。
轉自:http://hi.baidu.com/new/wueryqwheb
CArrayDataProvider自定義資料給CGridView
來自http://yiiblog.info/blog/2011/04/carraydataprovider-in-yii-code-demo
$rawData = array(array('id'=>'1'),array('id'=>'2'));
$dataProvider=new CArrayDataProvider($rawData, array(
'keyField'=>'id',
'pagination'=>array(
'pageSize'=>10,
),
));
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'cart-grid',
'dataProvider'=>$dataProvider,
'columns'=>array(
'id',
array(
'class'=>'CButtonColumn',
'viewButtonUrl'=>'Yii::app()->controller->createUrl("view",array("id"=>$data["id"]))',
'updateButtonUrl'=>'Yii::app()->controller->createUrl("update",array("id"=>$data["id"]))',
'deleteButtonUrl'=>'Yii::app()->controller->createUrl("delete",array("id"=>$data["id"]))',