Σελιδοποιητής

Χρειάζεται να σελιδοποιήσετε μια καταχώριση δεδομένων; Επειδή τα μαθηματικά πίσω από την σελιδοποίηση μπορεί να είναι δύσκολα, το Nette\Utils\Paginator θα σας βοηθήσει.

Εγκατάσταση:

composer require nette/utils

Ας δημιουργήσουμε ένα αντικείμενο σελιδοποίησης και ας ορίσουμε τις βασικές πληροφορίες για αυτό:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // ο αριθμός της τρέχουσας σελίδας (με αρίθμηση από το 1)
$paginator->setItemsPerPage(30); // ο αριθμός των εγγραφών ανά σελίδα
$paginator->setItemCount(356); // ο συνολικός αριθμός εγγραφών (εάν είναι διαθέσιμος)

Μπορούμε να το αλλάξουμε χρησιμοποιώντας το setBase():

$paginator->setBase(0); // αριθμημένα από το 0

Το αντικείμενο θα παρέχει τώρα όλες τις βασικές πληροφορίες που είναι χρήσιμες για τη δημιουργία ενός paginator. Μπορείτε, για παράδειγμα, να το περάσετε σε ένα πρότυπο και να το χρησιμοποιήσετε εκεί.

$paginator->isFirst(); // Αυτή είναι η πρώτη σελίδα;
$paginator->isLast(); // Είναι αυτή η τελευταία σελίδα;
$paginator->getPage(); // Αριθμός τρέχουσας σελίδας
$paginator->getFirstPage(); // ο αριθμός της πρώτης σελίδας
$paginator->getLastPage(); // ο αριθμός της τελευταίας σελίδας
$paginator->getFirstItemOnPage(); // αύξων αριθμός του πρώτου στοιχείου της σελίδας
$paginator->getLastItemOnPage(); // αύξων αριθμός του τελευταίου στοιχείου της σελίδας
$paginator->getPageIndex(); // αριθμός τρέχουσας σελίδας εάν αριθμείται από το 0
$paginator->getPageCount(); // ο συνολικός αριθμός σελίδων
$paginator->getItemsPerPage(); // ο αριθμός των εγγραφών ανά σελίδα
$paginator->getItemCount(); // ο συνολικός αριθμός εγγραφών (εάν είναι διαθέσιμος)

Ο σελιδοποιητής θα βοηθήσει στη διαμόρφωση του ερωτήματος SQL. Οι μέθοδοι getLength() και getOffset() επιστρέφουν τις τιμές που μπορείτε να χρησιμοποιήσετε στις ρήτρες LIMIT και OFFSET:

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

Εάν πρέπει να κάνετε σελιδοποίηση με αντίστροφη σειρά, δηλ. 1 αντιστοιχεί στην υψηλότερη μετατόπιση, μπορείτε να χρησιμοποιήσετε τη χρήση getCountdownOffset():

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

Ένα παράδειγμα χρήσης στην εφαρμογή μπορείτε να βρείτε στο βιβλίο μαγειρικής Paginating Database Results (Σελιδοποίηση αποτελεσμάτων βάσης δεδομένων).