2011-04-13 42 views

回答

2

默认分页与SQL LIMIT子句一起使用,该子句在记录级别上工作。您必须至少用您的自定义逻辑覆盖Controller::paginate方法来完成您需要的操作(只需在您的控制器中创建一个function paginate())。至少应该可以重用PaginatorHelper,通过设置所有可用的参数。在视图中尝试debug($this->params)或查看default paginate implementation以查看这些变量是什么。


细分:

  • 要正常分页的数据,你做$result = $this->paginate(),返回你的分页结果。
  • 在内部,paginate()函数查看URL参数(/page:42/sort:foobar等)以确定应该返回哪些记录。
  • paginate()根据数据库中记录的总数,每个页面的记录和所请求的页码计算哪些记录返回一些数学运算。
  • 它也给了一堆关于返回哪些记录,我们正在浏览的页面,有多少页面等的视图信息。
  • 视图中的PaginationHelper读取此信息以创建正确的链接对于下一个/上一个和页码,每个链接到一个带有/page:xx/sort:yy参数的URL。
  • 重复该循环。

你要做的是钩入Controller::paginate()函数所做的过程。你需要实现你自己的版本,它不会返回多个结果,而是一个“分页”结果。如果它使用的参数以及它返回给视图的参数与默认实现完全相同,则其余的分页逻辑应该完全相同。

+0

我认为你是对的,因为你一直在其他任何事情上......你有可能把它分解得更多一些吗?我非常喜欢PHP,但这是我的第一个Cake项目,我感到不知所措。即使你有任何链接可以帮助我理解你在说什么 - 因为现在,这对我来说听起来像是一句胡言乱语。 :)(感谢您的持续支持/帮助!) – Dave 2011-04-13 02:42:36

+0

@Dave试图将其分解一点。希望你能通过这些信息和通过查看普通'paginate'方法的代码来弄清楚它。 – deceze 2011-04-13 02:56:12

+0

这非常有帮助 - 非常感谢。 – Dave 2011-04-13 03:03:11

相关问题