【问题标题】:CButtonColumn for another model in CGridViewCGridView 中另一个模型的 CButtonColumn
【发布时间】:2012-06-17 10:11:44
【问题描述】:

我在view&id=n 页面中显示了另一个相关模型的 CGridView。必要的关系包含在模型文件中,一切正常。唯一的问题是CButtonColumn 中的按钮链接到正在打开页面的模型的相应操作,而我希望它们链接到相关模型的操作。

为了解释清楚我的意思,这是我的代码。在view.phpOrder 模型中:

$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,看看我是否可以从中获得任何灵感,但没有运气。

【问题讨论】:

    标签: php gridview yii cbuttoncolumn


    【解决方案1】:

    下面是使用 CButtonColumn 的 viewButtonUrl 属性的示例。我发现弄清楚如何提供自定义 URL 并不简单,但经过一番争论,我最终得到了它。我想我会把它分享给可能看到这个线程的其他人。请注意,生成 URL 的 PHP 作为 string 传递。真的吗?:

        $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)',
            ),
          ),
        ));
    

    也许有更好的方法可以做到这一点。我很想看看!

    【讨论】:

    • +1 更简洁的解决方案,直接在 viewButtonUrl、updateButtonUrl 和 deleteButtonUrl 中设置 url 与 CButtonColumn。
    【解决方案2】:

    实际上,如果您只想更改网址,您甚至不需要创建自定义按钮。查看 viewButtonUrlupdateButtonUrldeleteButtonUrl 的 CButtonColumn。

    您将调整网址,如其他答案所示

    【讨论】:

      【解决方案3】:

      创建一个自定义按钮。

      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找到。

      【讨论】:

      • 知道url 应该是什么吗?我应该使用绝对 URL 吗?按钮的默认图标在哪里?
      • url 应该类似于 Yii::app()->createUrl("controller/action")。默认图标被加载到 assets 文件夹中,但你可以使用任何 url,只要它是绝对的
      • 谢谢。也需要传递 id。知道如何得到它吗?我的意思是'url'=>'Yii::app()->createUrl("controller/action&id=somehow_get_current_id")'
      • 如果您的模型具有id 属性,您可以使用Yii::app()->createUrl("controller/action", array("id"=>$data->id)$data 代表 CGridView 解析时的模型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      相关资源
      最近更新 更多