https://github.com/bpolaszek/bentools-pager
A simple pager class with delta management
https://github.com/bpolaszek/bentools-pager
Last synced: 3 months ago
JSON representation
A simple pager class with delta management
- Host: GitHub
- URL: https://github.com/bpolaszek/bentools-pager
- Owner: bpolaszek
- License: mit
- Created: 2014-12-22T16:58:29.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2018-10-25T15:18:41.000Z (about 7 years ago)
- Last Synced: 2024-09-17T20:18:24.469Z (over 1 year ago)
- Language: PHP
- Size: 37.1 KB
- Stars: 5
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://packagist.org/packages/bentools/pager)
[](https://packagist.org/packages/bentools/pager)
[](https://travis-ci.org/bpolaszek/bentools-pager)
[](https://coveralls.io/github/bpolaszek/bentools-pager?branch=master)
[](https://scrutinizer-ci.com/g/bpolaszek/bentools-pager)
[](https://packagist.org/packages/bentools/pager)
bentools/pager
==============
PHP7.1+ - A simple OOP pager, the way it should be, following [SOLID](https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)) principles.
Usage
-----
You just need to provide 3 informations:
* The number of items per page
* The current page number (can be provided by factories reading the current Url)
* The total number of items.
```php
use BenTools\Pager\Model\Pager;
foreach (new Pager($perPage, $currentPageNumber, $numFound) as $page) {
$page->getPageNumber(); // Returns the page number
$page->count(); // Returns the number of items the page contains
}
```
Shortcuts:
```php
use BenTools\Pager\Model\Pager;
foreach (new Pager($perPage, $currentPageNumber, $numFound) as $page) {
(string) $page; // $page->getPageNumber() shortcut
count($page); // $page->count() shortcut
}
```
Example
-------
```php
# http://localhost/?page_number=3
require_once __DIR__ . '/vendor/autoload.php';
use BenTools\Pager\Model\Factory\PageParameterUrlBuilder;
$perPage = 10;
// It will look for a page_number param in the request URI (and sets current page to #1 if not found)
$urlBuilder = PageParameterUrlBuilder::fromRequestUri($perPage, 'page_number');
$pager = $urlBuilder->createPager();
$pager->setNumFound(53);
printf('Total number of pages: %s' . PHP_EOL, count($pager));
printf('Current page number: %s' . PHP_EOL, $pager->getCurrentPage());
print PHP_EOL;
printf('First page number: %s' . PHP_EOL, $pager->getFirstPage());
printf('Previous page number: %s' . PHP_EOL, $pager->getPreviousPage());
printf('Next page number: %s' . PHP_EOL, $pager->getNextPage());
printf('Last page number: %s' . PHP_EOL, $pager->getLastPage());
print PHP_EOL;
foreach ($pager as $page) {
printf(
'Page %s contains %d items. - Url: %s' . PHP_EOL,
$page,
count($page),
$pager->getUrl($page)
);
}
```
Output:
```
Total number of pages: 6
Current page number: 1
First page number: 1
Previous page number:
Next page number: 2
Last page number: 6
Page 1 contains 10 items. - Url: /?page_number=1
Page 2 contains 10 items. - Url: /?page_number=2
Page 3 contains 10 items. - Url: /?page_number=3
Page 4 contains 10 items. - Url: /?page_number=4
Page 5 contains 10 items. - Url: /?page_number=5
Page 6 contains 3 items. - Url: /?page_number=6
```
Delta Management
----------------
When you have a huge number of pages, you can use the `DeltaPager` decorator to show only relevant pages.
```php
# http://localhost/?page=30
require_once __DIR__ . '/vendor/autoload.php';
use BenTools\Pager\Model\DeltaPager;
use BenTools\Pager\Model\Factory\PageParameterUrlBuilder;
$perPage = 10;
$pager = PageParameterUrlBuilder::fromRequestUri($perPage)->createPager();
$pager->setNumFound(500);
printf('Total number of pages: %s' . PHP_EOL, count($pager));
printf('Current page number: %s' . PHP_EOL, $pager->getCurrentPage());
print PHP_EOL;
printf('First page number: %s' . PHP_EOL, $pager->getFirstPage());
printf('Previous page number: %s' . PHP_EOL, $pager->getPreviousPage());
printf('Next page number: %s' . PHP_EOL, $pager->getNextPage());
printf('Last page number: %s' . PHP_EOL, $pager->getLastPage());
print PHP_EOL;
$previous = null;
$delta = 2;
foreach (new DeltaPager($pager, $delta) as $page) {
if (null !== $previous && $previous->getPageNumber() != $page->getPageNumber() - 1) {
print '...' . PHP_EOL;
}
printf('Page %s' . PHP_EOL, $page);
$previous = $page;
}
```
Output:
```
Total number of pages: 50
Current page number: 30
First page number: 1
Previous page number: 29
Next page number: 31
Last page number: 50
Page 1
...
Page 28
Page 29
Page 30
Page 31
Page 32
...
Page 50
```
Installation
------------
> composer require bentools/pager
Tests
-----
> ./vendor/bin/phpunit