2017-02-22 34 views
0

我有一個多選濾波器yii2 gridview的列上有許多關係:Yii2 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油墨的URL爲:

http://myurl?ModelSearch[programSelect]=&ModelSearch[programSelect][]=2&ModelSearch[programSelect][]=26 

(注意[]爲多選參數,可以預計對陣列網址參數)

點擊後排序鏈接,該網址參數得到數組索引如下:

http://myurl?ModelSearch[programSelect][0]=2&ModelSearch[programSelect][1]=26&sort=programSelect 

這打破了多選,我不能再更改過濾器中的多選選項。

是否有任何yii2開發人員知道解決此問題的最佳方法?

感謝

回答

1

端了黑客我周圍這樣有一些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')); 
     }) 

    })