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(),
);

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

έκδοση: 4.0