phpixie/paginate

PHPixie 的分页库

3.1.1 2018-02-16 00:21 UTC

This package is auto-updated.

Last update: 2024-09-13 01:59:59 UTC


README

PHPixie 分页库

Build Status Test Coverage Code Climate HHVM Status

Author Source Code Software License Total Downloads

这是 PHPixie 分页的基础包,它被拆分为几个组件。

// Initializing
$paginate = new \PHPixie\Paginate();

基础库只能分页数组,也提供了一个 ORM 扩展,我们稍后会详细讨论。首先,让我们看一个使用示例

// Array with a 100 items
$data = range(1, 100);

// Initialize the pager
// with 15 items per page
$pager = $paginate->arrayPager($data, 15);

// Set current page
$pager->setCurrentPager(3);

// A shorter way to do this:
$pager = $paginate->arrayPager($data, 15)
    ->setCurrentPage(3);

// Get some data
$pager->currentPage(); // 3
$pager->pageSize();    // 15
$pager->itemCount();   // 100
$pager->pageCount();   // 7 

// Get current items
$pager->currentItems();

// Check if page exists:
$pager->pageExists(1); // true

// Check if a page exists
// relative to the current one
$this->pageOffsetExists(-1); // true

// Get page number by relative offset
// Will return null if the page is missing
// In this case 4, since 3 is the current one
$this->getPageByOffset(1);

// Some shorthands,
// also return null if page missing
$this->next(); // 4
$this->previous(); // 2

一个更有趣的特性是获取当前页相邻的页,这对于渲染分页器非常有用。

// 15 items, split into 6 pages
$data = range(1, 18);
$pager = $paginate->arrayPager($data, 3);

$pager->setCurrentPage(3);

$pager->getAdjacent(3); // array(2, 3, 4);

$pager->setCurrentPage(1);
$pager->getAdjacent(2); // array(1, 2);

$pager->setCurrentPage(5);
$pager->getAdjacent(4); // array(3, 4, 5, 6);

ORM

首先,我们需要构建 ORM 分页库

$paginate = new \PHPixie\Paginate();
$paginateOrm = new \PHPixie\PaginateORM($paginate);

ORM 分页支持关系预加载

$pager = $paginateOrm->queryPager($query, 15);

// Or with the relationships specified
$pager = $paginateOrm->queryPager($query, 15, array('items'));

它也会考虑你为查询指定的限制和偏移量。这意味着如果你在创建分页器之前限制查询中的项目,只有那些项目会被分页

$query->limit(100)->offset(10);
$pager = $paginateOrm->queryPager($query, 15);

// Only those 100 items
// are in the pager
$pager->itemCount(); // 100