1

我正在尝试在 cakephp 中实现类似于 facebook 的仪表板(获取帖子并将它们发布到时间线,当你按下see more它时,它会不断从以前的偏移量中检索帖子),但我仍然对逻辑和工具感到困惑,我应该使用 cakephp 分页我的实现中的类。

$this->paginate();

根据某些性能方面的考虑,它应该以某种方式通过 ajax 调用

任何帮助或建议从哪里开始?

谢谢大家

4

1 回答 1

2

不要使用分页

如果您对要添加数据的内容进行分页-您将获得重叠的数据,因此您要求第2页-并就当前用户而言,结束前一页。

使用时间戳

无休止的数据流的常规技术是使用如下查询:

SELECT *
FROM foos 
WHERE created >= $previousLastTimestamp 
ORDER BY created DESC 
LIMIT 20

请注意,虽然我created在此示例中使用 - 它可以是任何伪唯一字段。

当您第一次呈现页面时,将最后一个条目的时间戳存储在 javascript 变量中,那么您的“获取更多帖子”逻辑应该是:

  • 发出 ajax (get) 请求,传递最后一个时间戳
  • 执行上述 sql 查询(作为$this->Foo->find调用)
  • 在你的 js 中更新最后一个时间戳,这样你就知道下次用户点击“获取更多帖子”时你在哪里

使用>=条件的原因是,除非您正在测试的字段具有唯一值,否则可能会有多行具有您正在测试的值。如果您有一个按 (id) 排序的自然唯一字段,那么您不需要使用大于或等于,您可以简单地使用大于,并且避免需要考虑重复行。

这是一个参考,它更详细地解释了为什么你应该处理这样的系统,避免传统的分页。

于 2013-03-21T13:18:14.360 回答