Paginarea rezultatelor bazei de date
Atunci când dezvoltați aplicații web, vă confruntați adesea cu cerința de a imprima un număr restrâns de înregistrări pe o pagină.
Ieșim din starea în care ne aflăm atunci când enumerăm toate datele fără paginare. Pentru a selecta datele din baza de
date, avem clasa ArticleRepository, care conține constructorul și metoda findPublishedArticles
, care returnează
toate articolele publicate, sortate în ordinea descrescătoare a datei de publicare.
În Presenter vom injecta apoi clasa model, iar în metoda render vom cere articolele publicate pe care le vom trece în șablon:
Șablonul default.latte
se va ocupa apoi de listarea articolelor:
În acest fel, putem scrie toate articolele, dar acest lucru va cauza probleme atunci când numărul de articole crește. În acel moment, va fi util să implementăm mecanismul de paginare.
Acest lucru va asigura că toate articolele sunt împărțite în mai multe pagini și vom afișa doar articolele de pe o singură pagină curentă. Numărul total de pagini și distribuția articolelor este calculat chiar de Paginator, în funcție de câte articole avem în total și câte articole dorim să afișăm pe pagină.
În primul pas, vom modifica metoda de obținere a articolelor din clasa repository pentru a returna numai articole de o singură pagină. De asemenea, vom adăuga o nouă metodă pentru a obține numărul total de articole din baza de date, de care vom avea nevoie pentru a seta un Paginator:
Următorul pas este să modificăm prezentatorul. Vom transmite numărul paginii afișate în prezent către metoda de randare. În cazul în care acest număr nu face parte din URL, trebuie să stabilim valoarea implicită la prima pagină.
De asemenea, extindem metoda de randare pentru a obține instanța Paginator, configurând-o și selectând articolele corecte pentru a fi afișate în șablon. HomePresenter va arăta astfel:
Șablonul itera deja peste articole într-o singură pagină, trebuie doar să adăugăm linkuri de paginare:
Acesta este modul în care am adăugat paginarea folosind Paginator. Dacă Nette Database Explorer este
utilizat în locul Nette Database Core ca strat de bază de date, putem
implementa paginarea chiar și fără Paginator. Clasa Nette\Database\Table\Selection
conține metoda page cu logica de paginare preluată din
Paginator.
Depozitul va arăta astfel:
Nu trebuie să creăm Paginator în Presenter, în schimb vom folosi metoda obiectului Selection
returnat de
depozit:
Deoarece nu folosim Paginator, trebuie să modificăm secțiunea care arată legăturile de paginare:
În acest fel, am implementat un mecanism de paginare fără a utiliza un Paginator.