2016-10-18 3 views
0

У меня проблема с сортировкой в ​​listview yii2. Я не знаю, как я могу создать раскрывающийся список с сортировкой в ​​форме отдельного фильтра.yii2 сортировать с выпадающим списком

В модели у меня есть:

$dataProvider->sort->attributes['sort'] = [ 
      'asc' => ['game.rating' => SORT_ASC], 
      'desc' => ['game.rating' => SORT_DESC], 
     ]; 

но как составить падение вниз?

Модель:

class GameSearch extends Offer 
{ 

    public $status; 
    public $title; 
    public $type; 
    public $platform; 
    public $rating; 
    public $pageSize; 
    public $sort; 


    public function rules() 
    { 
     return [ 
      [['status', 'platform', 'pageSize'], 'integer'], 
      [['title', 'type', 'sort', 'rating'], 'string'] 
     ]; 
    } 

    public function search($params, $query) 
    { 
     $query->joinWith(['game', 'author']); 


     $dataProvider = new ActiveDataProvider([ 
      'query' => $query, 
      'sort' => ['defaultOrder' => ['created_at' => SORT_DESC]], 
      'pagination' => [ 
       'pageSize' => $this->pageSize, 
      ], 
     ]); 

     $dataProvider->sort->attributes['sort'] = [ 
      'asc' => ['game.rating' => SORT_ASC], 
      'desc' => ['game.rating' => SORT_DESC], 
     ]; 

     if (!($this->load($params) && $this->validate())) { 
      return $dataProvider; 
     } 

     $dataProvider->pagination->pageSize = $this->pageSize; 

     $query->andFilterWhere(['like', 'game.title', $this->title]) 
      ->andFilterWhere(['like', 'platform', $this->platform]); 

     return $dataProvider; 
    } 
} 

и мой поиск файла

<?= $form->field($model, 'sort') 
       ->dropDownList([ 
        'rating' => 'rating ASC', 
        '-rating' => 'rating DESC', 
       ]) 
       ->label(false) 
       ->error(false); 
      ?> 

ответ

2

я есть же proplem, и вот мой конфигурационный вид. Значение 1 является своего рода ASC и значение 2 является своего рода DESC

<?= $form->field($model, 'sort') 
      ->dropDownList([ 
       '1' => 'rating ASC', 
       '2' => 'rating DESC', 
      ],['id' =>'find-rating1']) 
      ->label(false) 
      ->error(false); 
     ?> 

и добавьте JS дно зрения

$findUrl = Url::current([], true); 
$pos = strpos($findUrl, '&rating'); 
if($pos){ 
    $findUrl = substr($findUrl, 0 , $pos); 
} 
$app_js = <<<JS 
    $("#find-rating1").change(function() { 
     var rating_value= $(this).val(); 
     location.href="$findUrl" +"&rating="+rating_value; 
    }); 
JS; 
$this->registerJs($app_js); 

Как вы видите, когда выпадающий есть изменить событие. будет перенаправлять на url будет рейтинг param 1 или 2. Таким образом, в контроллере вы можете получить рейтинговое значение 1 или 2 и установить сортировку.

$ratingValue = getParam('rating', 1); 

и с $ ratingValue вы можете настроить вы Поисковый запрос,

+0

Демо URL http://cubic1.jp/search/find-employees?type=1 в области http://prntscr.com/cw2weu – dungphanxuan

+0

спасибо, я попробую ваше решение –

Смежные вопросы