一个设计良好的 OOPaginator
类应该独立于您的数据和数据库。
它应该采用 、 和 等参数,count
并且应该将可用于依赖注入的对象返回到模型中以生成具有适当的查询,或者返回到用于呈现适当的 HTML 的类中。page
per_page
LIMIT
PaginationHelper
可能是一个好的 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);
}
}
}