Редактирование в GridView


* Используем jquery.jeditable.mini.js  (http://www.appelsiini.net/)
  который кладём в папку /js/

* Внутри вида делаем:

$cs = Yii::app()->getClientScript();

$cs->registerScriptFile(Yii::app()->baseUrl.'/js/jquery.jeditable.mini.js');

$act = Yii::app()->createUrl('file/save',array('file_id'=>$file->file_id));

$cs->registerScript('inline', "
function setInlineEdit() {
  $('.inlineEdit').each(function(){
    var params = {field: $(this).attr('field')};
    var type = $(this).attr('type');
    var s = '', c = '';
    if(type=='textarea' ) {
       s = 'OK';
       c = 'Cancel';
    }
    $(this).editable('$act', {
        placeholder : '-',
        indicator : 'Сохраняем...',
        tooltip   : 'Кликните, чтобы редактировать',
        type      : type,
        rows      : 3,
        cols      : 30,
        submit    : s,
        cancel    : c,
        width     : '100px',
        submitdata: params,
        callback  : function(value, settings) {
             $.fn.yiiGridView.update('file-grid',{data:{ }});
          }
     });
  });
}

$(function(){
   setInlineEdit();
});

");

* В GridView добавляем:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'file-grid',
    'afterAjaxUpdate'=>'function(id, data) { setInlineEdit(); }',
    ...
    'columns'=>array(
        array(
            'name'=>'id',
            'header'=>'N строки',
            'value'=>'$data["id"]'
		),
        array(
            'name'=>'town_name',
            'type'=>'raw',
            'header'=>'Town',
            'value'=>'GridEdit::inlineEdit($data["conf_id"], $data, "conf_pmi_part")'
        ),
    )
);
?>

* В папке /components/ добаляем новый компонент
  который отвечает за визуализацию поля редактирования:

class GridEdit {

    static public function inlineEdit($idvalue, $data, $field, $type='text') {
        $s = '<div class="inlineEdit" id="%s" field="%s" type="%s">%s</div>';
        $s = sprintf($s,$idvalue,$field,$type,$data[$field]);
        return $s;
    }
    
}

* В котроллере ловим присылаемые методом POST поля:

public function actionSave()
    {
        $field=isset($_POST['field'])? $_POST['field'] : '';
        $id = isset($_POST['id'])? $_POST['id'] : '';
        $value = isset($_POST['value']) ?  $_POST['value'] : '';
        ...
        Yii::app()->end();
    }