0

我的要求是显示一个带有添加、编辑、删除选项的下拉列表,其中 onchange 事件将被重定向到相应的操作。

目前我已经尝试了下面的一段代码,并且下拉列表正在显示,但问题是编辑选项的值没有使用记录的 id 设置。

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'blog-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        array('header'=>'Username','name'=>'username', 'value'=>'$data->owner->username'),
        array('header'=>'Company','name'=>'company', 'value'=>'$data->owner->company','filter'=>false), 
        array('header'=>'Blog Title','name'=>'title','filter'=>false),  
        array('header'=>'Created on','name'=>'created_time','filter'=>false),   
        array('header'=>'Latest activity','name'=>'updated_time','filter'=>false),
        array('header'=>'URL','name'=>'subdomain','filter'=>false),
        array('header'=>'Status','name'=>'status','filter'=>false), 
        array('header'=>'Action','class'=>'CButtonColumn',
        'template' => '<select class="actionList" id="actionList" name="actionList">
                    <option>Choose</option>
                    <option value="1">Moderate</option>
                    <option value="$data->id">Edit</option>
                    <option value="3">Deactivate</option>
                    <option value="4">Export</option>
                    <option value="5">Delete</option>
                    </select>'
        ),  

    ),
));
4

3 回答 3

1

为什么要使用 CButton 列?在简单的列中这样做会更容易吗?例如:

array('header'=>'Action',
'type'=>raw,
'value'=>CHtml::dropDownlist('actionList','',$action,array(
'ajax'=>array(
    'type' => 'POST',
    'url'=>Yii::app()->createUrl('yourcontroller/action'),                        
    'data'=>array('action'=>'js:this.value'),
        'success'=>'function(data){
           if (data.redirect!=''){
           window.location.href=data.redirect;
}}'
)

这是在您的 cgridview 列中的视图。在您的控制器操作中:

public function actionAction()
{
switch ($_POST[action]){
case 'Moderate': echo "redirect":"yourcontroller/moderate";break;
/*Your cases here*/
}
}

也许它不是最好的,但它会起作用并做你需要的。干杯。

于 2013-05-30T07:00:21.637 回答
1

CButtonColumn 模板属性的格式应该是“{buttonName1} {buttonName2}”,其中一些预定义的按钮,如“update”、“view”已经由 cButtonClass 提供。

然后,您可以使用按钮数组覆盖或定义每个按钮,并且该数组的每个元素都可以包含以下元素:-

'buttonID' => array(
  'label'=>'...',     // text label of the button
  'url'=>'...',       // a PHP expression for generating the URL of the button
  'imageUrl'=>'...',  // image URL of the button. If not set or false, a text link is used
  'options'=>array(...), // HTML options for the button tag
  'click'=>'...',     // a JS function o be invoked when the button is clicked
  'visible'=>'...',   // a PHP expression for determining whether the button is visible

)

听起来好像您需要扩展 CButtonColumn 类以向按钮属性添加额外选项,甚至创建另一个属性。

见:http ://www.yiiframework.com/wiki/106/using-cbuttoncolumn-to-customize-buttons-in-cgridview/

和类定义:http ://www.yiiframework.com/doc/api/1.1/CButtonColumn#buttons-detail

编辑:

或者,您可以在 Javascript 中完成整个操作,使用诸如“myDropDown”之类的类定义一个 Id 列

然后在 Javascript/jQuery 中按照以下方式处理该列:-

    Yii::app()->clientScript->registerScript('myGridView',"
        els=$('.myDropDown);
        els.each(function(el) { 
                    cellId=el.text();

                    var t = $(\"<select id='cellId' class='mySelect'><option value="edit">Edit</option> ... </select>\");
                    el.html(t);
        });

     $('table.items .mySelect').live('click', function() {
        ...process click event
     });
     ", CClientScript::POS_READY);         
于 2013-05-30T06:34:45.057 回答
0
I got answer to my question. Instead of CButttonColumn I used a simple column. Below is the corrected code.

 $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'blog-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
     'selectionChanged'=>'
        function(id){
                 id=$.fn.yiiGridView.getSelection(id);
                 selected_message_id=id; // this is the value of currently selected row
        }',

    'columns'=>array(

        array('header'=>'Username','name'=>'username', 'value'=>'$data->owner->username'),
        array('header'=>'Company','name'=>'company', 'value'=>'$data->owner->company','filter'=>false), 
        array('header'=>'Blog Title','name'=>'title','filter'=>false),  
        array('header'=>'Created on','name'=>'created_time','filter'=>false),   
        array('header'=>'Latest activity','name'=>'updated_time','filter'=>false),
        array('header'=>'URL','name'=>'subdomain','filter'=>false),
        array('header'=>'Status','name'=>'status','filter'=>false), 
        array( 'header'=>'Action','type'=>'raw',
        'value'=>'\'
           <select class="actionList" id="actionList" name="actionList">
           <option>Choose</option>
           <option value="1">Moderate</option>
           <option value="\'.$data->id.\'">Edit</option>
           <option value="3">Deactivate</option>
           <option value="4">Export</option>
           <option value="5">Delete</option>

           </select>\'', 
        ),

    ),
));
于 2013-05-30T07:10:53.983 回答