我设置了一个显示服务器日志的页面并添加了一个过滤器表单,以便我可以过滤特定操作、日期等的日志。我似乎不知道如何使用 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;
}

关于如何清除导航到另一个页面时的会话状态有什么想法吗?

有帮助吗?

解决方案

如果您正在使用 网格视图 使用分页添加过滤器会很容易 - 它是内置的。只需查看 Gii crud 工具(或者也可能是博客演示)呈现的 admin.php 视图即可。也许您不想以表格形式显示日志。

您可以使表单成为有状态表单并使用 setPageState() 保存先前的状态,而不是设置会话变量。我不知道分页是否提交表单......单击分页链接时,您可能必须绑定 jQuery 事件才能提交表单。如果你必须这样做的话,那就有点难看了。

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

编辑

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top