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,那么添加带有分页的过滤器会很容易——它是内置的。只需查看 Gii crud 工具呈现的 admin.php 视图(或者也可能是博客演示)。也许您不想以表格形式显示日志。

除了设置会话变量之外,您还可以使表单成为有状态的表单并使用 setPageState() 保存之前的状态。我不知道分页是否提交了表单……您可能必须绑定一个 jQuery 事件才能在单击分页链接时提交表单。如果你不得不这样做,那将有点丑陋。

至于清除会话状态变量,我现在唯一的想法是重写 onBeginRequest() 或其他东西来检查用户是否在搜索页面上,如果不是,则清除会话变量。你也可以留下它 - 设置一个较短的到期日期并忘记它。或者将其保存到您的数据库而不是会话中?:P

编辑

如果您采用覆盖 onBeginRequest() 的路线,它看起来就像在配置文件中声明回调一样简单。更多信息在这里 Yii 论坛这里也是。我自己从来没有真正做过。祝你好运!

于 2010-09-01T05:09:46.697 回答