【问题标题】:Combining a Form and CPagination in Yii在 Yii 中结合表单和 CPagination
【发布时间】:2014-05-25 09:30:35
【问题描述】:

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

关于如何在导航到另一个页面时清除会话状态的任何想法?

【问题讨论】:

    标签: php forms yii pagination


    【解决方案1】:

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

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

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

    编辑

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

    【讨论】:

    • 遗憾的是,我被 1.0 卡住了(我几个月前开始了这个项目)。据我所知,CGridView 是 1.1 的新功能。我认为覆盖 onBeginRequest() 是我最好的选择。我应该将派生类放在哪里,我将如何设置配置以使用它而不是普通的应用程序类?
    • 终于回到了这个话题。覆盖 onBeginRequest() 非常简单。感谢您指出我正确的参考。
    • 能否请您提供解决方案,您是如何做到的,我太卡在这个问题上,没有找到任何解决方案..??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多