Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Url Yii2 GridView排序中断了多选筛选器,排序后无法取消选择_Url_Gridview_Yii2_Multi Select - Fatal编程技术网

Url Yii2 GridView排序中断了多选筛选器,排序后无法取消选择

Url Yii2 GridView排序中断了多选筛选器,排序后无法取消选择,url,gridview,yii2,multi-select,Url,Gridview,Yii2,Multi Select,我有一个Yi2 gridview列,它带有一个多选过滤器,位于一个具有多个关系的列表上: 在搜索模型中: $dataProvider->sort->attributes['programSelect'] = [ 'asc' => ['programs.name' => SORT_ASC], 'desc' => ['programs.name' => SORT_DESC], ]; 视图中的列: $columns[]=[ 'format' =&g

我有一个Yi2 gridview列,它带有一个多选过滤器,位于一个具有多个关系的列表上:

在搜索模型中:

$dataProvider->sort->attributes['programSelect'] = [
    'asc' => ['programs.name' => SORT_ASC],
    'desc' => ['programs.name' => SORT_DESC],
];
视图中的列:

$columns[]=[
'format' => 'raw',
'attribute' => 'programSelect',
'value' => function ($data) {return '...'},
'headerOptions' => [
    'style' => 'width:100px',
    'data-header-attrib'=>'programs', 
],
'filter' => Html::activeDropDownList($searchModel, 'programSelect', $myPrograms, 
    [
        'class' => 'form-control multiselect-filter',
        'id' =>'programs-filter',
        'multiple' => true,
    ]),
]
在第一次排序之前,栅格视图工作正常。分拣机生成的链接包含以下重复元素

在第一次网格加载时,lsorting ink的url为:

http://myurl?ModelSearch[programSelect]=&ModelSearch[programSelect][]=2&ModelSearch[programSelect][]=26
请注意多选择参数的[],数组url参数应使用[]

单击排序链接后,url参数获取数组索引,如下所示:

http://myurl?ModelSearch[programSelect][0]=2&ModelSearch[programSelect][1]=26&sort=programSelect
这会中断“多选”,我无法再更改过滤器中的“多选”选项

有谁知道解决这个问题的最佳方法吗


谢谢

最后我用一点javascript破解了这个问题:

$('.grid-pjax').on('pjax:complete', function(event, xhr, options) {

        // yii UrlManager does not handle array values properly for urls
        // it adds array keys into the url when parsing- changes param[]=x to param[0]=x
        // this breaks GridView filtering after clicking a grid column sort header link
        // process the sort header links to remove such array indexes
        //////////////////////////////////////////////////////////////////////////

        var re = /%5D%5B\d+%5D/gi;
        $(myGridSelector+' th>a').each(function(i){
            var badUrl=$(this).attr('href');
            $(this).attr('href',badUrl.replace(re, '%5D%5B%5D'))
            //console.log('href is now:');
            //console.log($(this).attr('href'));
        })

    })