Feature: #89603 - Introduce native pagination for lists
See forge#89603
Description
The TYPO3 core provides an interface to implement the native pagination of lists like arrays or query results of Extbase.
The foundation of that new interface \TYPO3\
is that
it's type agnostic. It means, that it doesn't define the type of paginatable objects. It's up to the
concrete implementations to enable pagination for specific types. The interface only forces you to
reduce the incoming list of items to an iterable
sub set of items.
Along with that interface, an abstract paginator class \TYPO3\
has been created that implements the base pagination logic for any kind of Countable
set of
items while it leaves the processing of items to the concrete paginator class.
Impact
Two concrete paginators have been introduced. One for array
and one for
\TYPO3\
objects.
The introduction of this native support for the pagination of lists enables the creation of a new paginate ViewHelper that is type agnostic.
Code-Example for the Array
:
// use TYPO3\CMS\Core\Pagination\ArrayPaginator;
// use TYPO3\CMS\Core\Pagination\SimplePagination;
$itemsToBePaginated = ['apple', 'banana', 'strawberry', 'raspberry', 'ananas'];
$itemsPerPage = 2;
$currentPageNumber = 3;
$paginator = new ArrayPaginator($itemsToBePaginated, $currentPageNumber, $itemsPerPage);
$paginator->getNumberOfPages(); // returns 3
$paginator->getCurrentPageNumber(); // returns 3, basically just returns the input value
$paginator->getKeyOfFirstPaginatedItem(); // returns 4
$paginator->getKeyOfLastPaginatedItem(); // returns 4
$pagination = new SimplePagination($paginator);
$pagination->getAllPageNumbers(); // returns [1, 2, 3]
$pagination->getPreviousPageNumber(); // returns 2
$pagination->getNextPageNumber(); // returns null
// …