1

我想建立一个paginator类,但我不确定最好的方法是什么。我在互联网上看到许多不同的代码让我感到困惑。

我的数据存储在 MySQL 数据库中。我是否必须对我的分页器类进行查询,以便它可以为我从 MySQL 中检索数据(当然,之后它会自动进行一些分页计算)?还是我model首先获取所有数据,然后array将从该模型返回的数据提供给paginator班级?

无论哪种方式,我都可能需要进行另一个查询来获取“总”记录数量并将该结果pagninator作为单独的参数传递给类。

一旦我知道如何开始,那么我就知道如何开始剩下的了。我只是不确定如何将数据传递给paginator类以及什么样的数据。

知道如何建立一个好的paginator班级吗?

4

3 回答 3

4

一个设计良好的 OOPaginator类应该独立于您的数据和数据库。

它应该采用 、 和 等参数,count并且应该将可用于依赖注入的对象返回到模型中以生成具有适当的查询,或者返回到用于呈现适当的 HTML 的类中。pageper_pageLIMITPaginationHelper

可能是一个好的 Paginator 界面的示例(在此考虑 10 分钟):

/**
 * Your pagination master class
 */
interface iPaginator {
    public function __construct($total_count, $count_per_page, $current_page=1);
    public function getPaginationLimiter();
    public function getPaginationHelper();

    // These return iPaginatorPage objects
    public function getCurrentPage();
    public function getNextPage();
    public function getPreviousPage();

    public function getTotalCount();
    public function getCountPerPage();
    public function getPageCount(); // Calculated
}

/**
 * Page representation
 */
interface iPaginatorPage {
    public function __construct($page_number, $start, $end);

    public function getNumber();
    public function getStart();
    public function getEnd();
    public function getCount(); // Calculated
}

/**
 * Helper for rendering the UI
 */
interface iPaginationHelper {
    public function __construct(iPaginator $paginator);
    public function render();
}

通过扩展基本模型,然后让应用程序模型扩展 PaginatorModel 而不是 Model,如何集成到模型中的示例:

class PaginationModel extends Model {
    public function query($sql, iPaginatorPage $page = null) {
        if (!empty($page)) {
            $start = $page->getStart();
            $length = $page->getCount();
            $sql .= " LIMIT ({$start}, {$length})";
            return parent::query($sql);
        }
    }
}
于 2012-12-03T12:45:28.713 回答
1

检查 Pear 的寻呼机实现。这是一个非常好的类,使用简单并且有很多很酷的特性。

于 2012-12-04T09:52:10.720 回答
0

创建类,并具有如下功能:

  1. function resultset($required_filters, $table, $pagenum, $records){ $getCount='SELECT count(*) from table'; $sql="SELECT ".$required fields." FROM ".$table." LIMIT ".(($pagenum-1) * $records).",".$records; $sqlres=... 返回数组($getCount, $sqlres); }

    将此函数称为 list($rescount, $arrData)=resultset(all parameters);

对于分页,使用一些 for 循环来显示页码...对于总 $rescount 页,使用 get 你可以显示当前 pagenum 突出显示

于 2012-12-03T13:08:56.790 回答