Paginator
Χρειάζεται να σελιδοποιήσετε την εμφάνιση δεδομένων; Επειδή τα μαθηματικά της σελιδοποίησης μπορεί να είναι δύσκολα, η Nette\Utils\Paginator θα σας βοηθήσει με αυτό.
Εγκατάσταση:
composer require nette/utils
Δημιουργούμε ένα αντικείμενο σελιδοποιητή και ορίζουμε τις βασικές του πληροφορίες:
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // αριθμός της τρέχουσας σελίδας
$paginator->setItemsPerPage(30); // αριθμός στοιχείων ανά σελίδα
$paginator->setItemCount(356); // συνολικός αριθμός στοιχείων, εάν είναι γνωστός
Οι σελίδες αριθμούνται από το 1. Μπορούμε να το αλλάξουμε
χρησιμοποιώντας το setBase()
:
$paginator->setBase(0); // αριθμούμε από το 0
Το αντικείμενο παρέχει τώρα όλες τις βασικές πληροφορίες χρήσιμες κατά τη δημιουργία ενός σελιδοποιητή. Μπορείτε, για παράδειγμα, να το περάσετε σε ένα πρότυπο και να το χρησιμοποιήσετε εκεί.
$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(),
);
Ένα παράδειγμα χρήσης στην εφαρμογή μπορείτε να βρείτε στο βιβλίο μαγειρικής Σελιδοποίηση αποτελεσμάτων βάσης δεδομένων.