2012-06-08 31 views
6

tôi đã xây dựng một chức năng tùy chỉnh trong mô hình của tôi và trả lại dữ liệu thô:Yii CGrid pagination và sắp xếp công việc doesnt CArrayDataProvider

function(){ 
... 
$connection=Yii::app()->db; 
$command=$connection->createCommand($sql); 
$rows=$command->queryAll(); 
return $rows; 
} 

$ campModel = $ model-> function ..

sau đó tôi sử dụng những hàng trong CArrayDataProvider:

$dataProvider=new CArrayDataProvider($campModel); 

Cuối cùng tôi đang cố gắng để xem sử dụng CGrid:

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'bo-campaigns-grid', 
'dataProvider'=>$campModel,... 

Tôi đoán này đã làm với cách CGrid được phân trang ... nhưng tôi đang mất Thanks for the help :)

+1

Nếu bạn định sử dụng CArrayDataProvider, bạn cần phải tùy chỉnh cụ thể các đối tượng CPagination và Csort. thuộc tính 'và' pagination '. – sucotronic

+0

Tôi nghĩ đây là cách ... bạn có thể đưa ra một ví dụ không? –

+0

một cách khác sẽ là sử dụng CActiveDataProvider – Orlymee

Trả lời

9

Tạo mới Các đối tượng CSort và CPagination và gán chúng cho dataprovider của bạn, bởi vì CArrayDataProvider không có chúng được định nghĩa. Dưới đây là ví dụ về tạo CSort:

$dataProvider=new CArrayDataProvider($campModel); 
$sort = new CSort(); 
$sort->attributes = array(
      'fecha'=>array(
       'asc'=>'dateA DESC', 
       'desc'=>'dateA ASC', 
      ), 
); 
$sort->route = 'myController/myMethod'; 
$dataProvider->sort = $sort; 
$dataProvider->sort->defaultOrder='dateA DESC'; 
+0

Cảm ơn ... Tôi nghĩ rằng điều này đóng đinh nó :) –

+0

Bạn được chào đón :) – sucotronic

+0

Cảm ơn rất nhiều vì gợi ý hữu ích. Đây là một câu hỏi: Có thể có hành động sắp xếp tải lại lưới bằng ajax thay vì tải lại toàn bộ trang không? – bjtilley

0

thử này,

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'bo-campaigns-grid', 
    'dataProvider'=> new CArrayDataProvider($campModel, array(
     'pagination' => array(
      'pageSize' => 10 
     ) 
    )), 
    ... 
+0

Đã thử trước đó (thực sự bắt đầu với điều này ... không hoạt động. –

+0

xấu của tôi, quên thêm cấu hình để cung cấp cho kích thước phân trang – Alex

0

Bạn cũng có thể xem CSqlDataProvider. Bạn không chắc chắn nếu nó sẽ cung cấp cho bạn sự linh hoạt SQL bạn cần, nhưng nó sẽ xử lý phân loại cho bạn dễ dàng hơn CArrayDataProvider

Các vấn đề liên quan