2016-10-18 10 views
0

私はlistview yii2でソートに問題があります。 Separate filter formでソートしてドロップダウンリストを作成するにはどうすればいいですか?モデルでyii2 sort with dropdown

私が持っている:

$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); 
     ?> 

で、ドロップダウンがイベントを変更する持っているときに、ご覧のようビュー

$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); 

のjsの下を追加します。コントローラは、評価値1または2を取得し、並べ替えを設定することができます。

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

と$ ratingValueであなたがエリア内にクエリ

+0

デモのURL http://cubic1.jp/search/find-employees?type=1を検索するカスタマイズすることができますhttp://prntscr.com/cw2weu – dungphanxuan

+0

ありがとう、私はあなたの解決策を試みます –