在CGridView中为另一个模型使用CButtonColumn

4
我在“view&id=n”页面中展示了另一个相关模型的CGridView。必要的关联已经包含在模型文件中,一切运作良好。唯一的问题是,在“CButtonColumn”中的按钮链接到打开页面的相应模型的适当操作,而我希望它们链接到相关模型的操作。
为了清楚地解释我的意思,这是我的代码。在“Order”模型的“view.php”中:
$dataProvider=new CActiveDataProvider('OrderContents', array(
'criteria'=>array(
    'condition'=>'order_id='.$model->id,
    'with'=>array('order'),
),
'pagination'=>array(
    'pageSize'=>20,
),
));

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'orders-contents-grid',
    'dataProvider'=>$dataProvider,
    'columns'=>array(
            'id',
            'comp_name',
            'quantity',
            'comment',
            array(
                    'class'=>'CButtonColumn',
            ),
    ),
));

因此,我希望CButtonColumn中的按钮链接到OrderContents模型的适当操作,而现在它们链接到Order模型的操作。有没有简单的方法实现这个?我检查了CButtonColumnCGridView的API,但没有找到任何灵感。
3个回答

3
实际上,如果您想要做的只是更改网址,那么您甚至不需要创建自定义按钮。查看 CButtonColumn 的 viewButtonUrlupdateButtonUrldeleteButtonUrl 即可。
您可以按照其他答案中所示的方式调整网址。

2
以下是关于CButtonColumn中viewButtonUrl属性的使用示例。我发现提供自定义URL并不是很直观,但是通过一些调整最终成功了。我想与其他可能会看到此线程的人分享。请注意,用于生成URL的PHP作为一个字符串进行传递。真的吗?
    $this->widget('zii.widgets.grid.CGridView', array(
      'id'=>'artwork-grid',
      'dataProvider'=>$dataProvider,
      'columns'=>array(
        'id',
        'artwork_id',
        'description',
        array(
          'class'=>'CButtonColumn',
          'viewButtonUrl'=>'Yii::app()->createUrl(\'admin/artwork/\'. $data->id)',
          'updateButtonUrl'=>'Yii::app()->createUrl(\'admin/artwork/update/\'. $data->id)',
          'deleteButtonUrl'=>'Yii::app()->createUrl(\'admin/artwork/delete/\'. $data->id)',
        ),
      ),
    ));

也许有更好的方法来做这件事。我很想看看!

通过在CButtonColumn中直接设置viewButtonUrl、updateButtonUrl和deleteButtonUrl的URL,可以提供更简洁的解决方案。 - phemios

1
创建自定义按钮。
array(
       'class'=>'CButtonColumn',
       'buttons'=>array(
                        'myButton'=>array(
                             'label'=>'label of the button', //hover text
                             'imageUrl'=> 'link to an image',//icon of the button
                             'url'=>'Yii::app()->createUrl("controller/action")', //target of the button
                        ),
       'template'=>'{myButton}' //and others
     ),

完整的参数列表可以在这里找到。


有什么想法应该是“url”吗?我应该使用绝对URL吗?默认按钮图标在哪里? - Azimuth
url 应该类似于 Yii::app()->createUrl("controller/action")。默认图标加载到资产文件夹中,但您可以使用任何绝对的 URL,只要它是绝对的。 - adamors
谢谢。还需要传递id。你有想法怎么获取它吗?我的意思是 'url'=>'Yii::app()->createUrl("controller/action&id=somehow_get_current_id")' - Azimuth
如果您的模型具有“id”属性,您可以执行Yii::app()->createUrl("controller/action", array("id"=>$data->id)$data代表CGridView解析时的模型。 - adamors

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接