CakePHP:编号分页结果

时间:2009-09-02 07:44:05

标签: php sql mysql cakephp pagination

标题有点不稳定,但这是我在早上4点可以拿到的最好的'。我有一个链接表,我正在分页,没有什么花哨的。假设有100个链接显示20个页面,共5页。如何在第一页上以1开头并以20结尾的每个链接编号,如果我们跳到最后一页将是81到100.我有多个查询改变我的查询的方向和ORDER BY所以这必须是动态。使用CakePHP 1.2完成。这方面的一个例子是reddit.com

2 个答案:

答案 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