2012-06-08 10 views
6

Zbudowałem funkcję niestandardową w moim modelu i przywrócić dane RAW:Yii CGrid stronicowanie i sortowanie z CArrayDataProvider robi praca

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

funkcję $ campModel = $ model-> ..

Następnie używać te wiersze w CArrayDataProvider:

$dataProvider=new CArrayDataProvider($campModel); 

końcu staram się przeglądać za pomocą CGrid:

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

Zgaduję, ma to związek ze sposobem CGrid jest stronicowania ... ale gubię dzięki za pomoc :)

+1

Jeśli zamierzasz używać obiektu CArrayDataProvider, musisz odpowiednio dostosować niestandardowe obiekty CPagination i Csort w swoim "sortowaniu" "i" paginacja "właściwości. – sucotronic

+0

Myślę, że to jest sposób ... możesz podać przykład? –

+0

innym sposobem będzie użycie CActiveDataProvider – Orlymee

Odpowiedz

9

utworzyć nowy CSort i CPagination obiektów i przypisz je do swojej dataprovider, ponieważ CArrayDataProvider nie ma ich zdefiniowane. Oto przykład tworzenia 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

Dzięki ... Myślę, że to przybił to :) –

+0

Nie ma za co :) – sucotronic

+0

Dziękuję bardzo za pomocną sugestię. Oto pytanie: Czy możliwe jest, aby akcja sortowania przeładowała sieć z ajaxem, zamiast przeładować całą stronę? – bjtilley

0

spróbować,

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

Próbowałem go wcześniej (faktycznie zaczęło się to ... nie działa –

+0

moje złe, zapomniałem dodać config, aby nadać rozmiar stronicowania – Alex

0

Można również spojrzeć na CSqlDataProvider. Nie jestem pewien, czy dałoby ci to wymaganą elastyczność SQL, ale powinno łatwiej ci sortować niż CArrayDataProvider