![](/img/trans.png)
[英]Yii CCheckBoxColumn how can get id of checked column on a CGridView
[英]Yii CGridView how to access id for each column
我将CGridView与CActiveDataProvider一起使用。 一切正常,但是现在我需要根据行的ID显示自定义按钮。
我可以添加按钮并使它也正常工作,但是我无法根据行ID自定义图像。 从示例中可以看到,在创建url时,我可以通过调用$ data-> id来访问row的id,但是当我尝试对imageURL这样做时,它将无法正常工作。 我的代码如下:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'name',
'desc',
'created',
array(
'class'=>'CButtonColumn',
'header'=>'Active State',
'template'=>'{rank}',
'buttons'=>array(
'rank'=>array(
'label'=>'Rank',
'imageUrl'=>$this->getRank($data->id),
'url'=>'Yii::app()->createUrl("users/updateRank", array("id"=>$data->id))',
'options'=>array(
'ajax'=>array(
'type'=>'POST',
'url'=>"js:$(this).attr('href')",
),
),
),
),
),
),
));
图片网址会在我的控制器中调用一个函数,该函数会返回图片的网址。 但是,我无法传递当前记录用户正在单击的ID,而且我总是会得到默认图像。 如果我使用$ data-> id,则会收到错误消息,指出数据不存在。 如果我使用$ this-> id,它是指控制器,并且我获得了控制器ID。 无论如何,我可以获取该行的ID并将其传递给函数。
似乎您缺少单引号:
'imageUrl'=>'$this->getRank($data->id)',
是向前迈出的一步(可能您需要做更多的事情才能使自定义函数以这种方式工作)
在CGridView中,您要为每行独立运行的任何php代码都必须用引号引起来-如果您使用“裸” php,则将只计算一次,然后每一行的值都相同。
请参阅上面的评论。 我试图做的事不可能通过CButtonColumn实现。 相反,我现在正在使用CDataColumn。
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'name',
'desc',
'created',
array(
'class'=>'CDataColumn',
'header'=>'Active State',
'type'=>'raw',
'value'=>'getStatus("$data->id")',
),
),
));
getStatus返回此列的内容,该列包含第一个参数作为图像的链接(ajaxLink)。
function getStatus($id)
{
$imagePath="";
......... do your check and figure out the image you want to use
$content ="<div align='middle'>".CHtml::ajaxLink(CHtml::image($imagePath,'Rank', array('title'=>'Rank')),CHtml::normalizeUrl(array('user/rank', 'id'=>$id)), array('type'=>'POST'))."</div>";
return $content;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.