我已经设置了一个显示服务器日志的页面,并添加了一个过滤器表单,以便我可以过滤特定操作,日期等日志。我似乎无法弄清楚如何使用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;
}
关于如何在导航到另一个页面时清除会话状态的任何想法?
答案 0 :(得分:1)
如果您使用CGridView,则可以轻松添加带分页的过滤器 - 它是内置的。只需查看Gii crud工具(或者也可能是博客演示)呈现的admin.php视图。也许您不希望以表格形式显示日志。
您可以将表单设置为有状态表单,并使用setPageState()保存以前的状态,而不是设置会话变量。我不知道分页是否提交了表单...您可能必须绑定一个jQuery事件以在单击分页链接时提交表单。如果你不得不这样做,那将会有点难看。
至于清除会话状态变量,我现在唯一的想法是覆盖onBeginRequest()或其他东西来检查用户是否在搜索页面上,如果他们不是,那么清除会话变量。你也可以离开它 - 设置一个很短的到期日期并忘掉它。或者将其保存到您的数据库而不是会话? :P
修改强>
如果你选择覆盖onBeginRequest()的路线,它看起来就像在配置文件中声明回调一样简单。更多信息here in the Yii forums和here too。我自己从来没有真正做过。祝你好运!