Yii - CGridView行/列值作为链接并在单击时调用ajax函数

时间:2013-12-09 06:40:35

标签: php ajax yii

在基于YII的项目中,我有一个cgridview。要求是将整行或每列值设为链接,单击行中的任何链接将触发ajax调用。我从这里试过了 How to display rows of CGridView as a link

但发出如果我将整行作为可点击的方式,则需要我查看操作。

如果我将一行中的单个列值作为链接并调用ajax函数,则会出现以下错误。

Property "CDataColumn.options" is not defined. 

我需要帮助将整行设为可点击并调用ajax函数或单个行值以在单击时调用ajax函数。

非常感谢任何正确方向的帮助或指导。

//code for making trading name column in cgridview as clickable and call ajax

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'customer-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'id',
        array(
                    'name'  => 'trading_name',
                    'value' => 'CHtml::link($data->trading_name, Yii::app()
                     ->createUrl("customer/view/",array("id"=>$data->primaryKey)))',
                     'type'  => 'raw',
                     'options' => array('ajax' => array('type' => 'get', 'url'=>'js:$(this).attr("href")',
                     'success' => 'js:function(data) { 
                      $("#tab1").html(data);')
                      ),
                 ),
        'email',    
        'site_code',

        array(
            'class'=>'CButtonColumn',
        ),

2 个答案:

答案 0 :(得分:1)

经过一番麻烦后,我能够将cgridview的一行作为一个链接,并在点击每一行时调用一个AJAX函数。下面是代码。可能对某人有帮助。

selectionChanged完成了这个伎俩。在单击任何行时调用ajax函数并显示 每个客户的信息都是网格下面的div。

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'customer-grid',
'dataProvider'=>$model->search(),
'selectionChanged'=>'js:function(id){
 n = $.fn.yiiGridView.getSelection(id);
 if (n>0){
    $.ajax({
            url: "'.Yii::app()->urlManager->createUrl('customer/view/').'",
            type: "GET",
            data: {"id": parseInt(n)},
            dataType: "html",
            success: function(data) {
            $("#customer-div").html(data);
         }
         });',

    'filter'=>$model,
    'columns'=>array(
    'id',
    array(
                'name'  => 'trading_name',
                'value' => 'CHtml::link($data->trading_name, Yii::app()
                 ->createUrl("customer/view/",array("id"=>$data->primaryKey)))',
                 'type'  => 'raw',
                 'options' => array('ajax' => array('type' => 'get', 'url'=>'js:$(this).attr("href")',
                 'success' => 'js:function(data) { 
                  $("#tab1").html(data);')
                  ),
             ),
    'email',    
    'site_code',

    array(
        'class'=>'CButtonColumn',
    ),

答案 1 :(得分:0)

如yii文档中所述,cgridview列无法使用

'options': http://www.yiiframework.com/doc/api/1.1/CGridColumn#htmlOptions-detail

如果你想设置选项,你必须使用'htmlOptions'。

但是如果你想使用带链接的ajax,你必须使用Chtml :: ajaxLink(): http://www.yiiframework.com/doc/api/1.1/CHtml#ajaxLink-detail

我希望它可以帮到你