Paginator

Müssen Sie die Ausgabe von Daten paginieren? Da die Paginierungsmathematik knifflig sein kann, hilft Ihnen Nette\Utils\Paginator dabei.

Installation:

composer require nette/utils

Wir erstellen ein Paginator-Objekt und legen die grundlegenden Informationen fest:

$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, falls bekannt

Die Seiten werden standardmäßig ab 1 nummeriert. Dies kann mit setBase() geändert werden:

$paginator->setBase(0); // wir nummerieren ab 0

Das Objekt liefert nun alle grundlegenden Informationen, die für die Erstellung der Paginierung nützlich sind. Sie können es beispielsweise an eine Vorlage ü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(); // Nummer des ersten Elements auf der Seite (1-basiert)
$paginator->getLastItemOnPage(); // Nummer des letzten Elements auf der Seite (1-basiert)
$paginator->getPageIndex(); // Index der aktuellen Seite (0-basiert)
$paginator->getPageCount(); // Gesamtzahl der Seiten
$paginator->getItemsPerPage(); // Anzahl der Elemente pro Seite
$paginator->getItemCount(); // Gesamtzahl der Elemente (falls bekannt)

Der Paginator hilft bei der Formulierung von SQL-Abfragen. Die Methoden getLength() und getOffset() geben die Werte zurück, die für die LIMIT- und OFFSET-Klauseln benötigt werden:

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

Wenn die Paginierung in umgekehrter Reihenfolge erfolgen soll (d.h. Seite 1 entspricht dem höchsten Offset), verwenden Sie getCountdownOffset():

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

Ein Anwendungsbeispiel finden Sie im Rezept Datenbankergebnisse paginieren.

Version: 4.0