Php 查看如何访问每列的id
我正在使用带有CActiveDataProvider的CGridView。一切正常,但现在我有一个需要显示一个自定义按钮取决于该行的id 我可以添加按钮并使其工作,但我不能根据行id自定义图像。 我可以从示例中看到,当创建url时,我可以通过调用$data->id访问行的id,但是当我尝试对imageURL执行此操作时,它不起作用。我的代码如下:Php 查看如何访问每列的id,php,yii,Php,Yii,我正在使用带有CActiveDataProvider的CGridView。一切正常,但现在我有一个需要显示一个自定义按钮取决于该行的id 我可以添加按钮并使其工作,但我不能根据行id自定义图像。 我可以从示例中看到,当创建url时,我可以通过调用$data->id访问行的id,但是当我尝试对imageURL执行此操作时,它不起作用。我的代码如下: $this->widget('zii.widgets.grid.CGridView', array( 'dataProv
$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')",
),
),
),
),
),
),
));
图像URL调用控制器中的函数,该函数返回图像的URL。但是,我无法传递当前记录用户正在单击的id,并且我始终会返回默认图像。
如果我使用$data->id,我会得到一个数据不存在的错误。
如果我使用$this->id,它指的是控制器,我得到的是控制器id。无论如何,我可以得到行的id并将其传递给函数 您似乎缺少单引号:
'imageUrl'=>'$this->getRank($data->id)',
是向前迈出的一步(可能需要做更多的事情才能让自定义函数以这种方式工作)
在CGridView中,您希望为每一行独立运行的任何php代码都必须用引号引起来-如果您使用“裸”php,它将只计算一次,然后每一行的值都将相同。似乎缺少单引号:
'imageUrl'=>'$this->getRank($data->id)',
是向前迈出的一步(可能需要做更多的事情才能让自定义函数以这种方式工作)
在CGridView中,您希望为每一行独立运行的任何php代码都必须用引号引起来-如果您使用“裸”php,它将只计算一次,然后每一行的值都将相同。请参见上面的注释。我试图通过CButtonColumn做的是不可能的。 我现在使用的是CDATA列
$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;
}
函数getStatus($id)
{
$imagePath=“”;
……检查并找出您想要使用的图像
$content=”“.CHtml::ajaxLink(CHtml::image($imagePath,'Rank',array('title'=>'Rank')),CHtml::normalizeUrl(array('user/Rank','id'=>$id)),array('type'=>'POST'));
返回$content;
}
请参见上面的评论。我试图通过CButtonColumn做的是不可能的。
我现在使用的是CDATA列
$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;
}
函数getStatus($id)
{
$imagePath=“”;
……检查并找出您想要使用的图像
$content=”“.CHtml::ajaxLink(CHtml::image($imagePath,'Rank',array('title'=>'Rank')),CHtml::normalizeUrl(array('user/Rank','id'=>$id)),array('type'=>'POST'));
返回$content;
}
如果我添加引号,imageurl就会变成“$this->getRank($data->id)”,但是如果我不使用引号,函数会被调用,但我不会;我不知道如何传递变量。我接受你关于引号的观点,但它不起作用。好的,对不起-现在我看到它在“按钮”数组中。手册上说,必须有一个图像url(不是php表达式),所以似乎不可能以这种方式使用CButtonColumn,例如同一个按钮不能有不同的图像(除非您编写一个“更正”它的扩展名)。谢谢kraabus,我再次阅读了文档,您是对的,它被设置为字符串而不是php表达式。因此,我使用了一个CDATA列,它的值atribute是对我的函数的调用,该函数将完整的内容返回到该列,即带有正确链接的图像。谢谢明天将发布完整的解决方案。如果您已将其标记为答案,对于其他有此问题的人,请阅读所有评论。Kraabus的评论指出了我在文档中遗漏的一些东西。请参见下面我编辑的代码。Cheers如果我添加引号,imageurl就会变成“$this->getRank($data->id)”,但是如果我不使用引号,函数会被调用,但我不会;我不知道如何传递变量。我接受你关于引号的观点,但它不起作用。好的,对不起-现在我看到它在“按钮”数组中。手册上说,必须有一个图像url(不是php表达式),所以似乎不可能以这种方式使用CButtonColumn,例如同一个按钮不能有不同的图像(除非您编写一个“更正”它的扩展名)。谢谢kraabus,我再次阅读了文档,您是对的,它被设置为字符串而不是php表达式。因此,我使用了一个CDATA列,它的值atribute是对我的函数的调用,该函数将完整的内容返回到该列,即带有正确链接的图像。谢谢明天将发布完整的解决方案。如果您已将其标记为答案,对于其他有此问题的人,请阅读所有评论。Kraabus的评论指出了我在文档中遗漏的一些东西。请参见下面我编辑的代码。干杯