Feature: #94625 - Introduce sliding window pagination

See forge#94625

Description

Since TYPO3 v10 a new Pagination API is shipped, which supersedes the pagination widget controller, which had been removed in TYPO3 v11.

This patch provides an improved pagination which can be used to paginate array items or query results from Extbase. The main advantage is that it reduces the amount of pages shown.

Example: Imagine 1000 records and 20 items per page which would lead to 50 links. Using the SlidingWindowPagination, you will get something like < 1 2 ... 21 22 23 24 ... 100 >.

Usage

Just replace the usage of SimplePagination with \TYPO3\CMS\Core\Pagination\SlidingWindowPagination and you are done. Set the 2nd argument to the maximum number of links which should be rendered.

use TYPO3\CMS\Extbase\Pagination\QueryResultPaginator;
use TYPO3\CMS\Core\Pagination\SlidingWindowPagination

$currentPage = $this->request->hasArgument('currentPage')
   ? (int)$this->request->getArgument('currentPage')
   : 1;
$itemsPerPage = 10;
$maximumLinks = 15;

$paginator = new QueryResultPaginator(
   $allItems,
   $currentPage,
   $itemsPerPage
);
$pagination = new SlidingWindowPagination(
   $paginator,
   $maximumLinks
);

$this->view->assign(
   'pagination',
   [
      'pagination' => $pagination,
      'paginator' => $paginator
   ]
);

Credits

This patch is loosely based on the "numbered_pagination" extension by Georg Ringer.

Thanks to him.