Paginator

Sie müssen die Ausgabe von Daten paginieren? Weil die Rechnerei rund um die Paginierung heikel sein kann, hilft Ihnen Nette\Utils\Paginator.

Installation:

composer require nette/utils

Erzeugen wir ein Paginator-Objekt und setzen einige grundlegende Informationen:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // Nummer der aktuellen Seite
$paginator->setItemsPerPage(30); // Anzahl der Elemente pro Seite
$paginator->setItemCount(356); // Gesamtzahl der Elemente (sofern bekannt)

Die Seiten werden ab 1 nummeriert. Das lässt sich mit setBase() ändern:

$paginator->setBase(0); // Nummerierung ab 0

Das Objekt liefert nun alle wesentlichen Informationen, die Sie zum Erzeugen einer Paginierung brauchen. Sie können es zum Beispiel an ein Template übergeben und dort verwenden.

$paginator->isFirst(); // sind wir auf der ersten Seite?
$paginator->isLast(); // sind wir auf der letzten Seite?
$paginator->getPage(); // Nummer der aktuellen Seite
$paginator->getFirstPage(); // Nummer der ersten Seite
$paginator->getLastPage(); // Nummer der letzten Seite
$paginator->getFirstItemOnPage(); // laufende Nummer des ersten Elements auf der Seite
$paginator->getLastItemOnPage(); // laufende Nummer des letzten Elements auf der Seite
$paginator->getBase(); // Basis der Seitennummerierung (standardmäßig 1)
$paginator->getPageCount(); // Gesamtzahl der Seiten
$paginator->getItemsPerPage(); // Anzahl der Elemente pro Seite
$paginator->getItemCount(); // Gesamtzahl der Elemente (sofern bekannt)

Der Paginator hilft beim Formulieren von SQL-Queries. Die Methoden getLength() und getOffset() geben die Werte zurück, die in den Klauseln LIMIT und OFFSET verwendet werden:

$result = $database->query(
	'SELECT * FROM items LIMIT ? OFFSET ?',
	$paginator->getLength(),
	$paginator->getOffset(),
);

Wenn Sie in umgekehrter Reihenfolge paginieren müssen (Seite 1 entspricht also dem höchsten Offset), verwenden Sie getCountdownOffset():

$result = $database->query(
	'SELECT * FROM items LIMIT ? OFFSET ?',
	$paginator->getLength(),
	$paginator->getCountdownOffset(),
);

Ein Beispiel für die Verwendung in einer Anwendung finden Sie im Cookbook unter Paginierung von Datenbankergebnissen.

Version: 4.x