标题有点不稳定,但这是我在早上4点可以拿到的最好的'。我有一个链接表,我正在分页,没有什么花哨的。假设有100个链接显示20个页面,共5页。如何在第一页上以1开头并以20结尾的每个链接编号,如果我们跳到最后一页将是81到100.我有多个查询改变我的查询的方向和ORDER BY所以这必须是动态。使用CakePHP 1.2完成。这方面的一个例子是reddit.com
答案 0 :(得分:5)
在视图中尝试此操作:
<?php debug($this->params['paging']); ?>
这将为您提供有关分页器当前状态的一些内部信息。例如,你会发现:
Array (
[Model] => Array (
[page] => 2
...
[options] => Array (
[limit] => 20
...
'limit'
是“每页商品”,'page'
是页面
有了这些信息,将这种计数器插入到输出中应该是非常简单的。
$page = $this->params['paging']['Model']['page'];
$limit = $this->params['paging']['Model']['options']['limit'];
$counter = ($page * $limit) - $limit + 1;
foreach ($models as $model) {
echo $counter;
// normal $model output
$counter++;
}
答案 1 :(得分:-1)
分页逻辑如下:
SELECT count(*)FROM my_table WHERE ... ORDER BY ...;
首先,您想知道要分页的记录数。
然后,将记录总数除以每页所需的记录数和“天花板”这个数字,否则最后几条记录将无法获得自己的页面。
现在你有了记录数和页数。
接下来,对于您所在的任何页面,您将页码减1乘以每页的记录数,以便您知道从哪个记录开始获取更多记录。此查询类似于:
SELECT * FROM my_table WHERE ... ORDER BY ... LIMIT {每页记录数x(当前页码 - 1)},{每页记录数}
你减1的原因是因为如果你在第1页并且每页抓取20条记录,那么1 x 20 = 20,我们想要从0开始抓取记录,而不是第一页的20 。所以你在乘以之前减1。
然后你只需显示记录!
:d