我正在view&id=n
页面中显示另一个相关模型的CGridView。必要的关系包含在模型文件中,一切正常。唯一的事情是CButtonColumn
中的按钮链接到正在打开页面的模型的相应操作,而我希望它们链接到相关模型的操作。
为了解释清楚我的意思,这是我的代码。在view.php
Order
模型中:
$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
模型的操作。有没有简单的方法来实现这一目标?我查看了CButtonColumn
和CGridView
的API,看看我是否能获得任何灵感,但没有运气。
答案 0 :(得分:3)
实际上,如果您只想更改网址,则甚至无需创建自定义按钮。对于CButtonColumn,请查看viewButtonUrl
,updateButtonUrl
和deleteButtonUrl
。
您可以调整网址,如另一个答案所示
答案 1 :(得分: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)',
),
),
));
也许有更好的方法来做到这一点。我很乐意看到!
答案 2 :(得分: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
),
可以找到完整的参数列表here。