2017-07-17 10 views
0

コントローラにはソートパラメータを含む変数があります。私は完璧な並べ替えと、ページをリロードしても、ソートされた列がソートされたままになるグリッドビューを持っています。しかし、私はまたいくつかのフィルターとサブミットをdbからと私はこのボタンを押したときにソートされた列をデフォルトにリセットを拡張するためのボタンを提出している。私はそれを保ち、クッキーを使用しようとしますが、それは助けになりません。ソートパラメータをクッキーに転送するには?

if ($List->sort->attributes) 
     { 
      Yii::$app->response->cookies->add(new \yii\web\Cookie([ 
       'name' => 'sort', 
       'value' => $List->sort->attributes, 
      ])); 
     } 

選択した列は、送信後にリセットされます。それを修正するには?

答えて

0

デフォルトでは、GridViewは?sort=-statusのようなURLからソートパラメータを取得します。つまり、descをソートすると、statusとなります。あなたの質問から、次のようにあなたは、このように、いくつかの追加データのフィルタリングを実行する必要があり、あなたのビューのいくつかのフォームを持っている。もしそうなら

<form method="POST"> 
    <input type="text" name="filter"> 
    <button type="submit" name="action" value="search">Search</button> 
</form> 

は、その後、あなただけ、たとえば、フォームアクションのURLにパラメータを並べ替え保持する必要があります

<form method="POST" action="<?= \Yii::$app->request->getUrl() ?>"> 

またはあなたが使用している場合のActiveForm:

$form = ActiveForm::begin([ 
    'method' => 'POST', 
    'action' => \Yii::$app->request->getUrl(), 
]); 

あなたはクッキーを使用する場合は、手動であなたのコントローラとAPの属性を並べ替えを取得する必要dataProvider(またはsorterの設定)に渡すクエリにそれらを追加します。

描画GridViewでフィルタリングを追加するもう1つの一般的な方法 - filterModelプロパティに注意してください。

フォームdocumentation:ユーザが入力したフィルタのデータを保持します

モデル。このプロパティーが に設定されている場合、グリッド表示は列ベースのフィルタリングを有効にします。デフォルトでは、各データの 列には、ユーザーが に入力してデータをフィルタリングできるテキストフィールドが上部に表示されます。フィルタリングのための入力フィールドを表示するためには、列が そののYii \グリッド\のDataColumnを持たなければならないこと:: $プロパティセットと 属性を属性

ノートは、現在の$ filterModelのシナリオや でアクティブにする必要があります持っていますyii \ grid \ DataColumn :: $ filterは、入力 フィールドのHTMLコードとして設定されています。

このプロパティが設定されていない(null)場合、フィルタリング機能は が無効です。

関連する問題