如何在cgridview yii中获取所有选中的值

时间:2015-01-31 12:57:35

标签: php gridview yii

我在yii中制作网格视图,我的问题是,如果我单击选择所有复选框,然后我转到下一个网格,然后再次点击选择全部,之后我应该得到20个值。但我只得到10个从当前网格获得的值。如何在控制器中获取所有选中的复选框值?

这是我的观点

<form action="<?php echo Yii::app()->createAbsoluteUrl("emails/getEmails"); ?>" method="post">
<?php
$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'professional-master-grid',
    'dataProvider'=>$model->search($status),
    'filter'=>$model,
        'selectableRows' => 2,
         'afterAjaxUpdate' => "function(id,data){
        $('.select-on-check').each(function(){
            if(globalselected.indexOf($(this).val()) < 0){
                $(this).prop('checked',false);
            }else{
                $(this).prop('checked',true);
            }
        });

    }",
    'beforeAjaxUpdate' => "function(id,data){
        if(typeof globalselected == 'undefined') {
            globalselected = [];
        }
        selected = $('.select-on-check:checked').map(function(i) {
               return $(this).val();
        }).get();//.join(',');
        notselected = $('.select-on-check:not(:checked)').map(function(i) {
               return $(this).val();
        }).get();//.join(',');
        for(i=0; i < selected.length; i++){
            if(globalselected.indexOf(selected[i]) < 0){
                globalselected.push(selected[i]);
            }
        }
        for(i=0; i < notselected.length; i++){
            if(globalselected.indexOf(notselected[i]) >= 0)
                globalselected.splice(globalselected.indexOf(notselected[i]), 1);
        }
    }",
    'columns'=>array(
        /*'id',*/
        array(
            'header'=>'SN.',
            'value'=>'$this->grid->dataProvider->pagination->currentPage * $this->grid->dataProvider->pagination->pageSize + ($row+1)',

            ),
             array(
            'class' => 'CCheckBoxColumn',
            'selectableRows' => 2,
            'checkBoxHtmlOptions' => array(
             'name' => 'nos[]','class'=>'select-on-check','id'=>'example-check-boxes',
             'type'=>'raw'   

            ),
            'value'=>'$data->id',

         ),
        array(
            'header'=>'Center name',
            'value'=>'urldecode($data->center_name)',
            'name'=>'center_name',
            'sortable'=>FALSE,
        ),
       array(
            'header'=>'Fitness Center Type',
            'value'=>'@$data->getRelated("fitnesscenter")->fitnesscenter_type',
            'name'=>'fitnesscenter',
            'sortable'=>FALSE,
        ),
        array(
            'header'=>'City',
            'value'=>'@$data->getRelated("city_id")->city_name',
            'name'=>'city_id',
            'sortable'=>FALSE,
        ),    
        array(
            'header'=>'Locality',
            'value'=>'@$data->getRelated("locality")->locality',
            'name'=>'locality',
            'sortable'=>FALSE,
        ),


    ),
)); 
?>
<input type="submit" class="btn btn-primary" id="submit" value="submit" />
</form>

这是我的控制器

var_dump($_POST['nos']);

1 个答案:

答案 0 :(得分:0)

为什么要在页面之间保留选定的数据?我个人不喜欢这样,但无论如何。

我看到你做了一个javascript实现,它使用一个变量来保存所有选定的id。

我可以看到它在ajax更新之前(在更改页面之前)保存了id,并且在返回上一页时还会恢复已经选择的ID。

但是你可能会错过绑定一个事件,点击任何一个复选框,也将它们添加到这个javascript变量。我会将beforeAjaxUpdate中的代码放到外面的单独的js函数中。然后从这里调用它,并在每个复选框的click事件中调用它。嗯,我认为仅通过点击事件调用它就足够了。

此外,我可以看到selectableRows设置为2,我想应该删除。

最后,我将创建一个名为"globalselected"的隐藏字段,每次更改globalselected js数组后,我会将其转换为String并将其作为隐藏字段的值。

然后在控制器中,您会找到$_POST['globalselected']