Yii CGridView и несколько флажков на строку - PullRequest
1 голос
/ 21 ноября 2011

Фон

У меня есть CGridView, который содержит несколько столбцов флажков. Я создал столбцы флажков, используя код, подобный этому:

$columns[] = array(
    'header'=>'Health',
    'value' => 'CHtml::checkBox("hsid[]", $data->healthService, array("value"=>$data->wc_client_id,"id"=>"hsid_".$data->wc_client_id))',
    'type'=>'raw',
    'htmlOptions'=>array('style'=>'text-align:center'),
);

$columns[] = array(
    'header'=>'Education',
    'value' => 'CHtml::checkBox("esid[]", $data->educationService, array("value"=>$data->wc_client_id,"id"=>"esid_".$data->wc_client_id))',
    'type'=>'raw',
    'htmlOptions'=>array('style'=>'text-align:center'),
);

$ data-> healthService и $ data-> educationService используются для установки начального проверенного состояния флажка на основе данных из базы данных.

Вопрос

Как я могу зафиксировать изменения для каждого из различных флажков подряд и отправить эти изменения обратно на мой контроллер? Затем контроллер будет обновлять базу данных на основе изменений флажков.

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Вот как я наконец-то начал работать:

Посмотреть код

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'service-grid',
    'dataProvider'=>$clients->search(),
    'columns'=>array(
        'first_name',
        'last_name',
        array(
            'header'=>'Education',
            'class'=>'CDataColumn',
            'type'=>'raw',
            'htmlOptions'=>array('style'=>'text-align:center'),
            'value' => 'CHtml::checkBox("esid[]", $data->education, array("value"=>$data->wc_client_id,"id"=>"esid_".$data->wc_client_id))',
        ),
        array(
            'header'=>'Health',
            'class'=>'CDataColumn',
            'type'=>'raw',
            'htmlOptions'=>array('style'=>'text-align:center'),
            'value' => 'CHtml::checkBox("hsid[]", $data->health, array("value"=>$data->wc_client_id,"id"=>"hsid_".$data->wc_client_id))',
        )
    ),
));  

Код контроллера для получения выбранных идентификаторов

$healthClientId = array();
if(isset($_POST['hsid']) && is_array($_POST['hsid']))
{
  $healthClientId = $_POST['hsid'];
}

$educationClientId = array();
if(isset($_POST['esid']) && is_array($_POST['esid']))
{
  $educationClientId = $_POST['esid'];
}
1 голос
/ 21 ноября 2011

Может быть лучшим выбором будет CCheckBoxColumn?

См. http://www.yiiframework.com/doc/api/1.1/CCheckBoxColumn

...