繁体   English   中英

CakePHP:分页结果编号

[英]CakePHP: Numbered Paginated Results

标题有点古怪,但这是我早上4点能拿到的最好成绩。 我有一个我正在分页的链接表,一点也不花哨。 假设有100个链接,每20个页面显示5个页面。 我如何在首页上为每个链接从1开始到20进行编号,如果我们跳到最后一页,则是81到100。我有多个查询会更改查询的方向和ORDER BY,因此必须动态。 使用CakePHP 1.2完成。 例如reddit.com

在视图中尝试以下操作:

<?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++;
}

分页逻辑如下:

从my_table中选择count(*)... ... ORDER BY ...;

首先,您想知道要分页多少条记录。

然后,将记录总数除以每页所需的记录数,然后“限制”该数目,否则最后几条记录将不会得到它们自己的页面。

现在您有了记录数和页数。

接下来,无论您在哪个页面上,都将页号减1乘以每页的记录数,这样您就知道从哪个记录开始抓取其他记录。 该查询将类似于:

SELECT * FROM my_table WHERE ... ORDER BY ... LIMIT {每页记录x(当前页数-1)},{每页记录}

减去1的原因是,如果您在第1页上并且例如每页抓取20条记录,则1 x 20 = 20,并且我们要从0开始抓取记录,而不是从第一页开始抓取20条记录。 因此,您在乘前减去1。

然后,您只需显示记录!

:d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM