2017-02-22 1 views
0

A가 많은 관계가에 나는, 다중 선택 필터와 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, 
    ]), 
] 

그리드보기는 처음 정렬이 끝날 때까지 잘 작동합니다. 분류기가 생성하는 링크는 다음과 같이 중복 요소를 포함합니다.

제 1 그리드 부하에

상기 lsorting 잉크의 URL은 다음

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

을 클릭하면

합니다 ([] 참고 어레이의 URL PARAMS 예상되는 다중 선택 PARAMS 용) 다음과 같은 종류의 링크는 URL의 PARAMS 배열 인덱스를 얻을 수 :

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

이것은 다중 선택을 깨고 나는 더 이상 필터의 다중 선택 옵션을 변경할 수 있습니다.

yii2 개발자는이 문제를 해결하는 가장 좋은 방법을 알고 있습니까?

감사

답변

1

자바 스크립트의 비트와 함께이 주위에 내 길을 해킹까지 종료 :

$('.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')); 
     }) 

    })