2012-06-08 9 views
6

ho costruito una funzione personalizzata nel mio modello e restituire i dati grezzi:Yii CGrid impaginazione e l'ordinamento con CArrayDataProvider non funziona

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

$ campModel = $ modello-> funzione ..

allora io uso quelle righe in CArrayDataProvider:

$dataProvider=new CArrayDataProvider($campModel); 

Infine sto cercando di visualizzare utilizzando CGrid:

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

Sto indovinando questo ha a che fare con il modo in cui CGrid sta localizzando ... ma mi sono perso Grazie per l'aiuto :)

+1

Se hai intenzione di utilizzare un CArrayDataProvider, devi personalizzare in modo personalizzato gli oggetti CPagination e Csort nel suo tipo 'sort' 'e' impaginazione 'proprietà. – sucotronic

+0

Penso che questo sia il modo ... puoi per favore fare un esempio? –

+0

un altro modo sarà usare CActiveDataProvider – Orlymee

risposta

9

creare una nuova CSort e oggetti CPagination e assegnarli al tuo dataprovider, perché CArrayDataProvider non li ha definiti. Ecco un esempio di creazione 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

Grazie ... penso che questo inchiodato :) –

+0

Prego :) – sucotronic

+0

Grazie mille per l'utile suggerimento. Ecco una domanda: è possibile che l'azione sort ricarichi la griglia con ajax invece di ricaricare l'intera pagina? – bjtilley

0

provare questo,

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

Provato prima (effettivamente iniziato con questo ... non funziona. –

+0

il mio male, ho dimenticato di aggiungere config per dare dimensioni paging. – Alex

0

Si può anche guardare CSqlDataProvider. Non è sicuro se ti darebbe la flessibilità SQL di cui hai bisogno, ma dovrebbe gestire l'ordinamento per te più facilmente di CArrayDataProvider