CGridView и ajax запросы

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
justice
Сообщения: 31
Зарегистрирован: 2011.02.23, 00:31

CGridView и ajax запросы

Сообщение justice »

Приветствую!

Делаю таблицу на основе CGridView. В ней должны быть столбцы с чекбоксами, нажимая на которые пользователь выбирает (убирает) параметры:
Вот так выглядит таблица:

Код: Выделить всё

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'program-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'prog_id',    
        array(
            'class'=>'CCheckBoxColumn',
            'name'=>'prog_showon',
            'header'=>'На главной',
            'selectableRows'=>0,
            'id'=>'prog_showon',
            'checked'=>'$data->prog_showon',
            'value'=>'$data->prog_id',
            'htmlOptions'=>array('onclick'=>'showonclick(id)')
        ),    
    ),
));
 
По клику на чекбокс запускается яваскрипт, который запускает акшин контроллера SetShowOn:

Код: Выделить всё

$js = '
        function showonclick(id){
            $.ajax({
                url:"' . CController::createUrl('SetShowOn') . '",
                type: "POST",
                data: "id="+id,
            });
        }
        ';
        Yii::app()->clientScript->registerScript('showonclick', $js, CClientScript::POS_HEAD);
 
Мне надо передать в контроллер prog_id и желательно value чекбокса, но что то у меня не получается :(
Пробовал передавать и id и value и data ...
Feci quod potui,faciant meliora potentes
Аватара пользователя
yii
Сообщения: 122
Зарегистрирован: 2010.04.29, 10:40

Re: CGridView и ajax запросы

Сообщение yii »

а это не поможет:

Код: Выделить всё

'htmlOptions'=>array('onclick'=>'showonclick(this.id)')
Аватара пользователя
justice
Сообщения: 31
Зарегистрирован: 2011.02.23, 00:31

Re: CGridView и ajax запросы

Сообщение justice »

Эх, если бы. :) Не помогает. В this.id значение undefined (как собственно и в this.value)
Feci quod potui,faciant meliora potentes
Аватара пользователя
justice
Сообщения: 31
Зарегистрирован: 2011.02.23, 00:31

Re: CGridView и ajax запросы

Сообщение justice »

Пока решил делать с помощью CButtonColumn, а чекбоксы отображать картинками :)
Feci quod potui,faciant meliora potentes
navy
Сообщения: 21
Зарегистрирован: 2010.11.15, 12:59

Re: CGridView и ajax запросы

Сообщение navy »

Нужно в опциях CGridView передать
'selectableRows'=>0

а в columns что-нибуть типа такого

Код: Выделить всё

<?php $this->widget('zii.widgets.grid.CGridView', array(
        'id'=>'page-grid',
        'dataProvider'=>$model->search(),
        'filter'=>$model,
        'selectableRows'=>0,
        'columns'=>array(
                array(
                   'name' => 'active',
                   'class' => 'CCheckBoxColumn',
                   'checked'=>'$data->active',
                   'value'=>'$data->id',
                   'header'=>'Вкл.',
                   'checkBoxHtmlOptions'=>array('onclick'=>'$.get(\'/admin/page/active/id/\'+this.value+\'/e/\'+(this.checked?1:0),\'\',function(data){} );'),
                ),
 
в контроллере

Код: Выделить всё

        function actionActive($id, $e = 1){
                if(Yii::app()->request->isAjaxRequest){
                        $model=$this->loadModel($id);
                        $model->active = $e;
                        $model->saveNode();
                        Yii::app()->end();
                }
        }
 
Аватара пользователя
justice
Сообщения: 31
Зарегистрирован: 2011.02.23, 00:31

Re: CGridView и ajax запросы

Сообщение justice »

Всё получилось. Тысяча благодарностей!!! Небольшие уточнения (касаются версии 1.1.6)

Код: Выделить всё

'selectableRows'=>NULL,//!!!
array(
            'name'=>'status',
            'class'=>'CCheckBoxColumn',
            'header'=>'Статус',
            'selectableRows'=>NULL,//!!!
            'checked'=>'$data->status',
            'value'=>'$data->id',
            'checkBoxHtmlOptions'=>array(
            'onclick'=>'               
                $.get(\''.CController::createUrl('active').'\',{\'id\':this.value, \'e\':(this.checked?1:0)},function(data){});'//Тут немного переделал чтобы визуально понятнее было (по крайней мере мне)
            ),
        ),
 
Feci quod potui,faciant meliora potentes
Ответить