PHPackages                             tuum/pagination - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. tuum/pagination

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

tuum/pagination
===============

a generic pagination package for PSR-7.

2.0.0(4y ago)1104[2 issues](https://github.com/TuumPHP/Pagination/issues)MITPHP

Since Jun 26Pushed 4y ago1 watchersCompare

[ Source](https://github.com/TuumPHP/Pagination)[ Packagist](https://packagist.org/packages/tuum/pagination)[ RSS](/packages/tuum-pagination/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (4)Versions (15)Used By (0)

Pagination
==========

[](#pagination)

A generic pagination package for classic offset/limit style.

[![Scrutinizer Code Quality](https://camo.githubusercontent.com/825f340eb5c59ca62c351e34387236f2cb55f4b87b5c0031ca12cea84d7e3842/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f5475756d5048502f506167696e6174696f6e2f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/TuumPHP/Pagination/?branch=master)

Some interesting features maybe:

- stores the current page and form inputs in session,
- can use PSR-7 ServerRequestInterface object,
- have a flexible pagination HTML generator.

In short, accessing the page with `_page`

```
http://example.come/pagination?_page

```

will restore the last pagination result.

### PSR

[](#psr)

PSR-1, PSR-2, PSR-4, and PSR-7.

### License

[](#license)

MIT license

### installation

[](#installation)

Please use composer to install WScore/Pagination package.

```
$ composer require "tuum/pagination: ^1.0"
```

Getting Started with a Sample Code
----------------------------------

[](#getting-started-with-a-sample-code)

The page key variable, `_page`, is the key.

### sample HTML form

[](#sample-html-form)

Let's start with an HTML form for a pagination, for example;

```

```

Please note that there should be **no `_page` variables**.

### paginating a query

[](#paginating-a-query)

The simplest way to use a `Pagination` class that combines all the functionalities.

To instantiate a `Pageinate` object,

```
use Tuum\Pagination\Inputs;
use Tuum\Pagination\Pagination;

$pager = new Pager();
$pager->withRequest($request); // PSR-7 server request.
$inputs = $pager->getInputs();

$found = $pdo->prepare("SELECT * FROM tbl WHERE type=? and num>? OFFSET ? LIMIT ?")
    ->execute([
        $inputs->get('type'),
        $inputs->get('num'),
        $inputs->getOffset(),
        $inputs->getLimit(),
    ])
    ->fetchAll();
```

The `Inputs::get*` methods should provides information to construct a query. The `Inputs::setList` method sets the found results inside.

The `type` and `num` values are:

- taken from the form input and then saved to a session if no `_page` variables are present in the input query, or
- taken from a session data (if `_page` is present).

### `_page` with page number

[](#_page-with-page-number)

Requesting with **only the page number** will restore the query values (type and num) from the session, and set the offset value from the page number. For instance,

```
GET /find?_page=2

```

will set offset, `(_page-1)*_limit`, with the page number being `2`.

### query with only `_page`

[](#query-with-only-_page)

Requesting with **`_page` but no page number** will restore the page number and other parameters from the session. For instance,

```
GET /find?_page

```

will set offset to the page number of last request.

### generating pagination HTML

[](#generating-pagination-html)

The Pagination class implements a `__toString` method to output pagination HTML string. As a default, the Pagination object outputs following style of pagination HTML for Bootstrap ver3.

```
echo $inputs;
```

[![sample paginate HTML](./toHtmlMini.jpg)](./toHtmlMini.jpg)

It is possible to change the pagination and HTML/CSS style by modifying the pagination logic and html formatter, such that;

```
$pages = $inputs->getPagination();
$pages->numLinks = 7;
$pagination = new ToBootstrap3($paginate)
echo $pagination;
```

Technical Details
-----------------

[](#technical-details)

### setting a total

[](#setting-a-total)

The pager does not know how to get a total; please supply the total count in the closure inside the call method usging `Inputs::setTotal` method;

```
$inputs->setTotal(
    $pdo->prepare("SELECT COUNT(*) FROM tbl WHERE type=? and num>? ")
        ->execute([
            $inputs->get('type'),
            $inputs->get('num')
        ])
        ->fetchColumn()
);
```

### security

[](#security)

As a default, the input values are validated to contain no nulls as well as a valid UTF-8 string.

To change the validation, you can pass it at the construction of `Pager` as;

```
$pager->pager->useValidator(function(&$v) {
        $v = 'validate=' . $v;
    });
```

FYI: this is the default closure.

```
function (&$v) {
	if (!is_string($v) && !is_numeric($v)) {
        $v = '';
    } elseif (strpos($v, "\0") !== false) {
        $v = '';
    } elseif (!mb_check_encoding($v, 'UTF-8')) {
        $v = '';
    }
};
```

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity71

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~202 days

Recently: every ~322 days

Total

13

Last Release

1545d ago

Major Versions

0.4.0 → 1.0.02017-11-11

1.1.3 → 2.0.02022-02-24

### Community

Maintainers

![](https://www.gravatar.com/avatar/8ed783829e6fa0bd4b0def8c04ccfdfb2fc99f9e61e4a9470acad9e5abc5fcac?d=identicon)[asaokamei](/maintainers/asaokamei)

---

Top Contributors

[![asaokamei](https://avatars.githubusercontent.com/u/747030?v=4)](https://github.com/asaokamei "asaokamei (111 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/tuum-pagination/health.svg)

```
[![Health](https://phpackages.com/badges/tuum-pagination/health.svg)](https://phpackages.com/packages/tuum-pagination)
```

###  Alternatives

[google/cloud-core

Google Cloud PHP shared dependency, providing functionality useful to all components.

343121.4M79](/packages/google-cloud-core)[aimeos/aimeos-base

Aimeos base layer for abstracting from host environments

2.1k134.0k1](/packages/aimeos-aimeos-base)[phpgt/dom

Modern DOM API.

12412.2M18](/packages/phpgt-dom)[anthropic-ai/sdk

Anthropic PHP SDK

129134.7k5](/packages/anthropic-ai-sdk)[jaxon-php/jaxon-core

Jaxon is an open source PHP library for easily creating Ajax web applications

73142.3k25](/packages/jaxon-php-jaxon-core)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
