2013-05-30 2 views
0

Мое требование состоит в отображении выпадающего списка с добавлением, редактированием, удалением параметров, которые будут перенесены в соответствующее событие.Как отобразить выпадающее меню в Yii CButtonColumn

В настоящее время я пробовал приведенный ниже фрагмент кода, и выпадающее меню отображается, но проблема в том, что значение . Редактирование не задано с идентификатором записи.

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

    ), 
)); 
+0

Что отображается в источнике страницы для атрибута value? – Ninad

+0

Значение show s like

ответ

1

Шаблон свойство CButtonColumn должно быть в формате «{buttonName1} {buttonName2}», где некоторые заранее определенные кнопки, как «обновление», «вид» предоставляются уже в 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

EDIT:

В качестве альтернативы, вы можете сделать все это в Javascript, определить столбец Id с классом, такие как "myDropDown"

, а затем в процессе 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);   
+0

Большое спасибо за сообщение. Я получил ключ от одного из упомянутых здесь сообщений «http://www.yiiframework.com/wiki/106/using-cbuttoncolumn-to-customize-buttons-in-cgridview/». Очевидно, что код Javascript является решением этой проблемы. Еще раз спасибо. –

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*/ 
} 
} 

Может быть, его не самый лучший, но он будет работать и делать то, что вам нужно. Приветствия.

+0

Да, вы правы. Я изменил CButtonColumn на простой столбец –

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>\'', 
     ), 

    ), 
)); 
Смежные вопросы