Sometime we need to display numbers of items per page with their counting as a serial number.
Here is How we can do it easily in Yii.
Extend CGridColumn
Yii::import('zii.widgets.grid.CGridColumn'); class CounterColumn extends CGridColumn { }
We need to set starter value for the counter so, we have
private $i = 0; public function init() { $pager=$this->grid->dataProvider->pagination; if($pager->currentPage==0) { $this->i=0; } else { $this->i=$pager->currentPage*$pager->pageSize; } }
We need to use display the value, so we have
public function renderDataCellContent($row, $data) { $this->i++; echo $this->i; }
Complete code is as
Yii::import('zii.widgets.grid.CGridColumn'); class CounterColumn extends CGridColumn { private $i = 0; public function init() { $pager=$this->grid->dataProvider->pagination; if($pager->currentPage==0) { $this->i=0; } else { $this->i=$pager->currentPage*$pager->pageSize; } } public function renderDataCellContent($row, $data) // $row number is ignored { $this->i++; echo $this->i; } }
Using
$this->widget('zii.widgets.grid.CGridView', array( 'id'=>'categories-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( array( 'header'=>'Sr #', 'class'=>'CounterColumn' ), 'id', 'name', array( 'header'=>'Actions', 'class'=>'CButtonColumn', ) ));