2012-06-08 17 views
6

yo construimos una función personalizada en mi modelo y devolver los datos en bruto:Yii CGrid paginación y la clasificación no funciona con CArrayDataProvider

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

$ = $ campModel modelo-> función ..

Luego utilizo esas filas en CArrayDataProvider:

$dataProvider=new CArrayDataProvider($campModel); 

Finalmente estoy tratando de ver usando CGrid:

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

que supongo que esto tiene que ver con la forma en que está localizando CGrid ... pero estoy perdido Gracias por la ayuda :)

+1

Si va a utilizar CArrayDataProvider necesita específicamente CPagination personalizado y objetos Csort en su 'clase' 'y' propiedades de paginación '. – sucotronic

+0

Creo que este es el camino ... ¿puedes dar un ejemplo? –

+0

otra forma será utilizar CActiveDataProvider – Orlymee

Respuesta

9

Crear un nuevo CSort y CPagination se oponen y los asignan a su proveedor de datos, porque CArrayDataProvider no los tiene definidos. Este es un ejemplo de la creación 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

Gracias ... Creo que esto lo clavó :) –

+0

De nada :) – sucotronic

+0

Muchas gracias por la útil sugerencia. Aquí hay una pregunta: ¿es posible que la acción de ordenar vuelva a cargar la cuadrícula con ajax en lugar de volver a cargar toda la página? – bjtilley

0

probar esto,

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

Lo intenté antes (en realidad comenzó con esto ... no funciona. –

+0

mi mal, se olvidó de agregar config para dar tamaño de paginación. – Alex

0

También podría mirar a CSqlDataProvider. No estoy seguro de si le daría la flexibilidad de SQL que necesita, pero debería manejar la ordenación por usted más fácilmente que CArrayDataProvider

Cuestiones relacionadas