Σελιδοποιητής
Χρειάζεται να σελιδοποιήσετε μια καταχώριση δεδομένων; Επειδή τα μαθηματικά πίσω από την σελιδοποίηση μπορεί να είναι δύσκολα, το 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 (Σελιδοποίηση αποτελεσμάτων βάσης δεδομένων).