在PHP中创建一个Pagination类

时间:2012-12-03 12:38:34

标签: php oop pagination

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

我的数据存储在MySQL数据库中。我是否必须向我的pagniator类提供一个查询,以便它可以为我从MySQL中检索数据(当然它会自动进行一些分页计算)?或者我首先从model获取所有数据,然后从该模型提供返回的arraypaginator类?

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

一旦我知道如何开始,那么我知道如何接受其余的。我只是不确定如何将数据传递给paginator类以及哪种数据。

知道如何构建一个好的paginator类吗?

3 个答案:

答案 0 :(得分:4)

设计良好的OO Paginator类应独立于您的数据和数据库。

它应该采用countpageper_page之类的参数,并且应该将可用于依赖注入的对象返回到模型中,以便使用适当的{{1}生成查询用于呈现相应HTML的LIMIT类。

可能是一个好的Paginator接口的例子(在这里给出了10分钟的思考):

PaginationHelper

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

/**
 * 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();
}

答案 1 :(得分:1)

检查Pear的pager实施。这是一个非常好的课程,使用简单,并有很多很酷的功能。

答案 2 :(得分:0)

创建类,并具有如下函数:

  1. 函数结果集($ required_filters,$ table,$ pagenum,$ records){      $ getCount ='表中的SELECT count(*)';      $ sql =“SELECT”。$ required fields。“FROM”。$ table。“LIMIT”。(($ pagenum-1)* $ records)。“,”。$ records;      $ sqlres = ...      返回数组($ getCount,$ sqlres); }

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

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