0

サーバーログを表示するページを設定し、特定のアクションや日付などでログをフィルタリングできるようにフィルターフォームを追加しました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;
}

別のページへのナビゲーションでセッション状態をクリアする方法についてのアイデアはありますか?

4

1 に答える 1

1

CGridViewを使用している場合は、ページングを使用してフィルターを追加するのは簡単です。これは組み込まれています。Giicrudツール(またはブログのデモも)によってレンダリングされたadmin.phpビューを見てください。ただし、ログを表形式で表示したくない場合もあります。

セッション変数を設定する代わりに、フォームをステートフルフォームにし、setPageState()を使用して前の状態を保存することができます。ページネーションがフォームを送信するかどうかはわかりませんが...ページネーションのリンクをクリックすると、フォームを送信するためにjQueryイベントをバインドする必要がある場合があります。あなたがそれをしなければならなかったら、それはちょっと醜いでしょう。

セッション状態変数をクリアすることに関しては、今のところ私の唯一のアイデアは、onBeginRequest()または何かをオーバーライドして、ユーザーが検索ページにいるかどうかを確認し、そうでない場合は、セッション変数をクリアすることです。あなたもそれを残すことができます-短い有効期限を設定し、それを忘れてください。または、セッションではなくデータベースに保存しますか?:P

編集

onBeginRequest()をオーバーライドするルートをたどると、構成ファイルでコールバックを宣言するのと同じくらい簡単なように見えます。詳細については、Yiiフォーラム、およびこちらもご覧ください。私は実際にそれを自分でやったことはありません。幸運を!

于 2010-09-01T05:09:46.697 に答える