【问题标题】:CakePHP: Numbered Paginated ResultsCakePHP:编号的分页结果
【发布时间】:2010-11-24 21:03:34
【问题描述】:

标题有点奇怪,但这是我凌晨 4 点能想到的最好的标题。我有一个我正在分页的链接表,没什么特别的。假设有 100 个链接,每页显示 20 个,共 5 个页面。如何在第一页上为每个链接编号,从 1 开始并以 20 结尾,如果我们跳到最后一页,则为 81 到 100。我有多个查询更改查询的方向和 ORDER BY,所以这必须是动态的。使用 CakePHP 1.2 完成。 reddit.com 就是一个例子

【问题讨论】:

    标签: php sql mysql cakephp pagination


    【解决方案1】:

    在视图中试试这个:

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

    【讨论】:

    • 嘭!完美运行。谢谢!
    【解决方案2】:

    分页逻辑如下:

    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

    【讨论】:

    • 请记住,{records per page x page number} 仅在您的“页码”从 0 开始时才有效。否则,您需要从页码中减去 1 进行计算。
    • 这也不是一种非常Cake-y的方式。我会限制您不必要地执行的自定义。
    • 你的回答无疑是好的,但我确实在寻找一种像蛋糕一样的做事方式。
    猜你喜欢
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多