如何在Yii CButtonColumn中显示下拉列表

时间:2013-05-30 05:56:58

标签: php yii

我的要求是显示一个带有添加,编辑,删除选项的下拉列表,其中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>'
        ),  

    ),
));

3 个答案:

答案 0 :(得分:1)

CButtonColumn模板属性的格式应为&#34; {buttonName1} {buttonName2}&#34;一些预定义的按钮,如&#34;更新&#34;,&#34;查看&#34;由cButtonClass提供。

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

'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类来为button属性添加额外的选项,甚至创建另一个属性。

请参阅: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中完成所有操作,使用&#34; myDropDown&#34;

等类定义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);         

答案 1 :(得分: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*/
}
}

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

答案 2 :(得分: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>\'', 
        ),

    ),
));