Yii でフォームと CPagination を組み合わせる
-
26-09-2019 - |
質問
サーバー ログを表示するページを設定し、特定のアクションや日付などでログをフィルターできるようにフィルター フォームを追加しました。使い方がよく分からないみたいです CPagination
ただし、結果をページに分割します。追加すると CPagination
ウィジェットでは、ウィジェットからページが選択されると、フィルター フォームが再送信されず、フィルター結果が失われます。
フィルターフォームデータを維持するための簡単な解決策が見つからず困っています。 CPagination
ウィジェット。何かご提案があれば幸いです。
アップデート
これは機能していますが、フォームデータを維持するにはセッション状態を設定する必要がありました。
$filter=false;
$form=new LogFilterForm;
if(isset($_POST['LogFilterForm'])){
$form->attributes=$_POST['LogFilterForm'];
Yii::app()->user->setState('filter',$form);
$filter=true;
}
else if(Yii::app()->user->hasState('filter')){
$form=Yii::app()->user->getState('filter');
$filter=true;
}
別のページへのナビゲーション時にセッション状態をクリアする方法について何かアイデアはありますか?
解決
CGridView のページングでフィルタを追加するのは簡単だろう - それが中に組み込まれている。(あまりにもデモ多分やブログ)GIIのCRUDツールによってレンダリングadmin.phpビューでだけを見て。おそらく、あなたはかかわらず、表形式でログを表示したくない。
の代わりにセッション変数を設定するのは、フォームステートフルフォーム作り、setPageState()を使用して、以前の状態を保存することができます。ページネーションを使用すると、改ページのリンクをクリックしたときにフォームを送信するためにjQueryのイベントをバインドする必要があるかもしれませんけれども...フォームを送信するかどうかは知りません。あなたがそれをしなければならなかった場合それはちょっと醜いだろう。
としては、セッション状態変数をクリアするために、私の唯一のアイデアは、今、ユーザーが検索ページ上にあるかどうかを確認するためにonBeginRequest()か何かを上書きすることであり、彼らがない場合は、の場合、セッション変数をクリアします。短い有効期限を設定し、それを忘れて - あなたはあまりにもそれを残すことができます。またはデータベースの代わりに、セッションに保存しますか? :P
編集
あなたは)onBeginRequestを(オーバーライドのルートを行く場合は、設定ファイルでのコールバックを宣言するのと同じくらい簡単だようにはそれが見えます。詳細情報ここでのYiiフォーラムでに、およびここでもを。私は実際にかかわらず、それを自分自身をやったことがありません。幸運!