我想构建一个paginator
类,但我不确定最好的方法是什么。我在互联网上看到许多不同的代码让我感到困惑。
我的数据存储在MySQL数据库中。我是否必须向我的pagniator类提供一个查询,以便它可以为我从MySQL中检索数据(当然它会自动进行一些分页计算)?或者我首先从model
获取所有数据,然后从该模型提供返回的array
到paginator
类?
无论哪种方式,我都可能需要进行另一次查询以获取“总”记录数量,并将该结果作为单独的参数传递给pagninator
类。
一旦我知道如何开始,那么我知道如何接受其余的。我只是不确定如何将数据传递给paginator
类以及哪种数据。
知道如何构建一个好的paginator
类吗?
答案 0 :(得分:4)
设计良好的OO Paginator
类应独立于您的数据和数据库。
它应该采用count
,page
和per_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)
创建类,并具有如下函数:
函数结果集($ 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 参数);
并且对于分页使用一些for循环来显示页码...对于总$ rescount页面, 使用get你可以显示当前的pagenum突出显示