繁体   English   中英

Yii CGridView如何访问每一列的ID

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM