* Используем 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(); }
Yii Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor