You are viewing revision #3 of this wiki article.
This is the latest version of this article.
You may want to see the changes made in this revision.
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',
)
));
Tip
And so I use in one line :)
'columns' => array( array( 'header'=>'No.', 'value'=>'$this->grid->dataProvider->pagination->currentPage * $this->grid->dataProvider->pagination->pageSize + ($row+1)', ), ... )
Evgeniy Tkachenko
This is too good and more efficient
Good
'columns' => array(
array( 'header'=>'No.', 'value'=>'$this->grid->dataProvider->pagination->currentPage * $this->grid->dataProvider->pagination->pageSize + ($row+1)',
),
...
)
It works well.
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.