有效减少结果的分页

时间:2011-06-07 15:22:42

标签: php yii pagination yii-components

我正在为一位客户工作,他要求我为其网站(使用Yii编写)准备一个模块,其中包含以下功能:

  • 它显示了mysql_result中的3个元素,从offset = 0开始。
  • 用户可以点击其中任何一个将其标记为“已读”。这使得所需的项目消失并显示以下项目。也就是说,如果您要显示商品3 4 5并点击4,该商品就会消失并显示数字6,这意味着结果为3 5 6
  • 显示的元素是部分视图,“删除”项目的按钮是每个局部视图中的小部件。
  • 用户可以使用一些<<>>箭头在项目列表中移动来回显示结果。
  • 客户给我的一个选项是显示一个页面列表(1 | 2 | 3 | 4 ...等等),但删除项目意味着将来某个时候页面数量会减少,如果金额相当大,我需要更灵活的东西,例如最多只显示当前和其他4页。另一种选择是保持&lt;&lt;和&gt;&gt;箭头
  • 我试图说服客户说分页和“实时列表”是一个非常糟糕的主意,但他拒绝了将可视化限制为前3项的想法(请记住,最终你会删除它们)因此将能够看到以下项目。)

我正在使用Yii,MySQL和jQuery开发它,因为这个生活列表我无法使用CPagination。我不是在问代码,只是一些指导原则,因为我第三次尝试这样做时迷路了。

有关系统的一些基础知识:

  • 我有一个控制器,可以加载这个模块的前3个项目。
  • 我在这个控制器中有一些动作来获取页面中的下一个项目(可能与当前对象不同。我的一个问题就在这里)和整页。
  • 每个项目都可以将自己标记为“已读”,这会使该项在下次获取某些结果时不显示。
  • 我每1秒检查一次标记为已读的项目,从DOM中删除并使用我在第二个项目符号中定义的操作附加一些新项目。
  • 每次用户点击<<>>时,我都会重新加载上一页/下一页(这显然不是问题。如果您在最后一页但没有要添加的项目更多,你只需要保留在那里。但是,如果你清空页面,我没有任何方法可以检测到并滚动一页。)

正如您所看到的,如果没有分页按钮,这种麻烦会更容易,但是客户责任我把它们放进去。你会做什么?提前致谢

编辑:客户决定以随机的方式获得结果。没有更多的分页,所以问题已经消失。 @thaddeusmt的回答可能对我没什么帮助,但是我会认为它是有效的,因为它可能对其他有类似问题的人有用。干杯

1 个答案:

答案 0 :(得分:2)

在我看来,CGridViewCListView应该基本上自动执行此操作。他们支持AJAX updating/paging开箱即用。

我假设您有一个类似于“actionMarkRead()”的AJAX操作,您在用户点击时会调用它。我假设这在某处设置了一些数据库字段,表示用户已“读取”该项。 要使用CListView,只需确保CDataProvider有condition检查“读取”字段(可能要加入表格,我不知道你的是什么DB看起来像)。然后,当列表通过AJAX重新加载时,它将具有正确的页面数来表示CDataProvier查询返回的较少页数。

我刚测试了这个并且有效!

我测试它的方式是使用'ajaxUpdate'=>true,设置CGridView。然后在我的CDataProvider中设置'pagination'=>1以便于测试。然后我使用Controller中的默认AJAX actionDelete来删除项目。每次我通过CGridView中的AJAX动作链接删除一个项目时,网格通过AJAX刷新,页面数量缩小1.似乎像魅力一样工作!

干杯,祝你好运!