,

Yii CGridView

Yii Framework
Yii Framework
  • CGridView is one of Zii Components
  • There is other than CGridView, CDetailView, CListView. Look here.
  • CGridView use DataProvider which define in controller
  • CGridView display data in tables.
  • Supports paginating, sorting, searching.
  • Also support view, update, delete method
Define our data provider in controller like this
[php]

/**
* Lists all models.
*/
public function actionIndex()
{
$dataProvider=new CActiveDataProvider(‘User’,
array(
‘pagination’=>array(
‘pageSize’=>10,
),
‘sort’=>array(
‘defaultOrder’=> array(‘id’=>false),
)
));

$this->render(‘index’,array(
‘dataProvider’=>$dataProvider,
));
}
[/php]


Then just put code below at the view (currently index.php). Minimal code to use CGridView

[php]

$this->widget(‘zii.widgets.grid.CGridView’, array(

‘dataProvider’=>$dataProvider,
));

[/php]

The code above will view all data from the selected table / model.

If we would like to view selected column only. We could do like this

[php]

$this->widget(‘zii.widgets.grid.CGridView’, array(
‘dataProvider’=>$dataProvider,
‘columns’=>array(
‘id’,
‘username’,
//’password’,
’email’,
‘joined’,
),
));

[/php]

To allow view, update and delete action. We add the CButtonColumn like this.

[php]

$this->widget(‘zii.widgets.grid.CGridView’, array(
‘dataProvider’=>$dataProvider,
‘columns’=>array(
‘id’,
‘username’,
//’password’,
’email’,
‘joined’,

array(
‘class’=>’CButtonColumn’,
),
),
));

[/php]

To customize just view button only, we do like this

[php]
array(
‘class’=>’CButtonColumn’,
‘template’=> ‘{view}’,
),
[/php]

To go customize more detail, we need to use RBAC where we need to define ‘deleteAccess’ rules. We can customize like this

[php]
array(
‘class’=>’CButtonColumn’,
‘template’=>'{update}{delete}’,
‘buttons’=>array(
‘update’=>array(
‘label’=>’Update details’,
‘url’=>’Yii::app()->createUrl("whatever/update", array("id"=>$data->id))’,
),
‘delete’ => array(
‘label’=>’Delete’,
‘url’=>’Yii::app()->createUrl("whatever/delete", array("id"=>$data->id)’,
‘visible’=>Yii::app()->user->checkAccess(‘deleteAccess’),
),
),
),
[/php]