Cum să paginam date cu PHP

Îmi amintesc de ani în urmă când am început să codificăm în PHP și MySQL, cât de emoționată am fost prima dată când am primit informații dintr-o bază de date pentru a apărea într-un browser web. 

Pentru cineva care avea puține cunoștințe de bază de date și de programare, văzând acele rânduri de tabelă care apar pe ecran pe baza codului pe care l-am scris (bine, așa că am copiat un exemplu dintr-o carte - să nu împărțim firele de păr) mi-a dat un maxim triumfător. Poate că nu am înțeles pe deplin toată magia la lucru, dar acest prim succes mi-a impulsionat proiecte mai mari și mai bune.

În timp ce nivelul meu de exuberanță asupra bazelor de date poate să nu fie același ca și când a fost,
încă de la prima mea întâlnire "hello world" cu PHP și MySQL am fost încurcată
cu privire la puterea de a face lucrurile simple și ușor de utilizat. 

Ca dezvoltator, o problemă cu care mă confrunt constant este să iau o mulțime de informații și să fie ușor de digerat. Fie că este vorba de o listă a clienților mari sau de un catalog personal, trebuie să fie descurajată dacă trebuie să stați și să priviți la rânduri pe rânduri pe rânduri de date
și frustrant. Ce poate face un bun dezvoltator? Pagina!

Căutați o soluție rapidă?

Dacă sunteți în căutarea unei soluții rapide, există o mare colecție de scripturi de paginare și de ajutoare de la Envato Market. 

Această clasă de paginare PHP este foarte utilă. Poate fi implementat cu orice motor bazat pe baze de date PHP, este foarte ușor de personalizat și implementat, suportă în mod implicit două afișaje, are scheme de proiectare multicolore și multe altele.


1. Pagination

Pagination este, în esență, procesul de a lua un set de rezultate și de a răspândi
le pe pagini pentru a le face mai ușor de văzut.

Mi-am dat seama de timpuriu că dacă aș avea 5000 de rânduri de informații pentru a afișa nu numai
ar fi o durere de cap pentru cineva să încerce și să citească, dar majoritatea browserelor ar lua
o eternitate pe internet (adică mai mult de aproximativ cinci secunde) pentru ao afișa. 

Pentru a rezolva aceasta, aș codifica diverse instrucțiuni SQL pentru a scoate bucăți de date și dacă aș fi fost
într-o bună dispoziție, aș putea să arunc câteva butoane "viitoare" și "anterioare".
După un timp, trebuie să renunți la acest cod în orice proiect similar și să personalizați
pentru a se potrivi vechi. Rapid. Și, după cum știe fiecare dezvoltator bun, lenea reproduce inventivitatea
sau ceva de genul ăsta. Deci, într-o zi m-am așezat și am decis să vină cu un simplu,
flexibilă și ușor de folosit clasa PHP care ar face automat munca murdară
pe mine.

Un cuvânt rapid despre mine și clasele PHP. Eu nu sunt un obiect orientat pe obiect. De fapt, cu greu
utilizați vreodată lucrurile. Dar după ce am citit câteva exemple și tutoriale ale OOP, și altele
exemple simple de încercare și eroare, am decis să-i dau un vârtej și tu știi ce?
Funcționează perfect pentru paginare. Codul folosit aici este scris în PHP 4, dar va fi
lucrează în PHP 5.


2. Baza de date

Trebuie să iubiți MySQL. Nu există o ofensă pentru celelalte sisteme de baze de date de acolo, ci pentru
eu, tot ce am nevoie este MySQL. Și o caracteristică extraordinară a MySQL este că vă dau câteva
libere de baze de date pentru a putea juca la http://dev.mysql.com/doc/#sampledb.

Pentru exemplele mele, voi folosi baza de date mondială (~ 90k zip) care conține peste
4000 de înregistrări de jucat, dar frumusețea scriptului PHP pe care o vom crea este
că poate fi folosit cu orice bază de date. Acum cred că toți suntem de acord că dacă am fi decis
nu pentru a paginiza rezultatele noastre că vom ajunge cu unele foarte lungi și greoaie
rezultate ca următoarele:

(click pentru dimensiune completă, imagine ridicol de lungă ~ 338k)

Deci, vă permite să ajungeți la ruperea datelor noastre pentru a digera usor astfel:

Frumoasă nu-i așa? Odată ce renunțați la clasa de paginare în codul dvs., puteți
rapid și ușor transforma un set imens de date în pagini ușor de navigat cu
doar câteva linii de cod. Într-adevăr.


3. Paginator

Acest exemplu va fi compusă din două scripturi, clasa paginator refolosibile și fișierul index care va afișa elementele de tabelă și comenzile.

Paginator.class.php

Clasa paginator va avea doar două metode, iar constructorul, vom construi explicând treptat fiecare pas în timp ce mergem înainte.

 

Această definiție este doar setarea variabilelor membranare cerute de paginator, deoarece aceasta este o clasă helper și este destinată paginării numai că se va baza pe o conexiune validă la serverul MySQL și o interogare deja definită pe care vom adăuga parametrii necesari pentru paginarea rezultatelor. Vom începe cu metoda constructorului.

_conn = $ conn; $ this -> _ interogare = $ interogare; $ rs = $ this -> _ conn-> interogare ($ this -> _ interogare); $ acest -> _ total = $ rs-> num_rows;  

Destul de simplu? Această metodă stabilește doar conexiunea bazei de date a obiectului și interogarea necesară, după care calculează numărul total de rânduri extras de acea interogare fără nici o limită sau să ignore parametrii, acest total fiind necesar pentru a crea legăturile pentru paginator.

Rețineți că pentru simplitate nu facem verificări de eroare sau orice altă validare a parametrilor, dar într-o aplicație din lumea reală aceste verificări vor fi necesare.

Recuperarea rezultatelor

Acum, să creăm metoda care va paginiza datele și va returna rezultatele.

_limit = $ limit; $ this -> _ page = $ pagina; dacă ($ this -> _limit == 'toate')) $ query = $ this -> _ interogare;  altceva $ query = $ this -> _ interogare. "LIMIT". (($ această -> _ pagină - 1) * $ this -> _ limită). ", $ this -> _ limit";  $ rs = $ this -> _ conn-> interogare ($ interogare); în timp ce ($ row = $ rs-> fetch_assoc ()) $ results [] = $ rând;  $ result = noua stdClass (); $ result-> page = $ this -> _ pagina; $ result-> limit = $ this -> _ limit; $ rezultat-> total = $ acest -> _ total; $ result-> data = $ results; returneaza rezultatul $;  

Să analizăm acest pas la un moment dat, mai întâi setăm parametrii de limită și de pagină, care în mod prestabilit sunt setați 10 și respectiv 1. Apoi, verificăm dacă utilizatorul cere un număr dat de rânduri sau toate, bazându-se pe acesta și parametrul de pagină pe care l-am setat LIMITĂ parametrul interogării, "- 1" a paginii ia în considerare faptul că pornim paginile în 1 în loc de 0.

După aceasta, pur și simplu evaluăm interogarea și obținem rezultatele, în final creăm un obiect de rezultate noi care conține limita, pagina și parametrii totali ai interogării executate, precum și datele pentru fiecare dintre rândurile extrase.

Afișarea legăturilor de paginare

Acum, să scriem metoda folosită pentru a obține legăturile de paginare.

_limit == 'tot') return "; $ last = ceil ($ this -> _ total / $ this -> _ limit); $ start = ($ this -> _ page - $ links) -> _ pagină - $ link: 1; $ end = (($ this -> _ page + $ links) < $last ) ? $this->_page + $ links: $ last; $ html = '
    „; $ class = ($ this -> _ page == 1)? "dezactivat": ""; $ html. = '
  • _limit. '& pagina ='. ($ this -> _ page - 1). „"> «
  • „; dacă ($ start> 1) $ html. = '
  • _limit. „& Pagina = 1" > 1
  • „; $ html. = '
  • ...
  • „; pentru ($ i = $ start; $ i <= $end; $i++ ) $class = ( $this->_page == $ i)? "activ": ""; $ html. = '
  • _limit. '& pagina ='. $ i. ""> ". $ i."
  • „; dacă ($ end < $last ) $html .= '
  • ...
  • „; $ html. = '
  • _limit. '& pagina ='. $ ultimul. ""> "$ ultimul."
  • „; $ class = ($ this -> _ page == $ last)? "dezactivat": ""; $ html. = '
  • _limit. '& pagina ='. ($ aceasta -> _ pagina + 1). „"> »
  • „; $ html. = '
„; returnați $ html;

Aceasta este o metodă destul de lungă, ceva de genul 34 de linii de cod, deci acum să explicăm ce se întâmplă în această metodă.

  1. În primul rând, evaluăm dacă utilizatorul solicită un anumit număr de linkuri sau toate, în cel de-al doilea caz returnează pur și simplu un șir gol, deoarece nu este necesară nicio paginare.
  2. După aceasta, se calculează ultima pagină pe baza numărului total de rânduri disponibile și a elementelor necesare pe pagină.
  3. Apoi luăm parametrul link-uri care reprezintă numărul de link-uri care se afișează sub și deasupra paginii curente și se calculează legătura de început și de sfârșit pentru a crea.
  4. Acum, creăm eticheta de deschidere pentru listă și setăm clasa acesteia cu parametrul de clasă listă și adăugăm linkul "pagina anterioară", rețineți că pentru această legătură verificăm dacă pagina curentă este prima și, dacă da, am stabilit proprietatea cu handicap a link-ului.
  5. În acest moment afișăm o legătură cu prima pagină și cu un simbol de elipsă în cazul în care legătura de start nu este prima.
  6. Apoi adăugăm legăturile de mai jos și deasupra paginii curente, pe baza parametrilor inițiali și de sfârșit calculați anterior, în fiecare etapă pe care o evaluăm din nou pagina curentă a paginii de link și afișăm corespunzător clasa activă.
  7. După aceasta, afișăm un alt simbol de elipsă și legătura cu ultima pagină în cazul în care legătura final nu este ultima.
  8. În cele din urmă, afișăm linkul "pagina următoare" și setăm starea dezactivată când utilizatorul vizualizează ultima pagină, închide lista și returnează șirul HTML generat.

Asta e tot ce este la Paginator.class, desigur, am putea adăuga setteri și getters pentru conexiunea bazei de date, limită, pagină, interogare și parametri totali, dar pentru simplitate o vom păstra așa.

4. Index.php

Acum vom crea fișierul responsabil cu utilizarea clasei Paginator și afișarea datelor, așa că mai întâi să vă arăt că HTML-ul de bază.

  PHP Pagination    

PHP Pagination

Oraș Țară Continent Regiune

Destul de simplu, acest fișier afișează doar un tabel pe care îl vom ocupa cu informațiile extrase din baza de date, rețineți că pentru acest exemplu folosesc bootstrap pentru stilul de bază al paginii.

Utilizarea Paginatorului

date ); $ i ++):?>  date [$ i] [ 'Name']; ?> date [$ i] [ 'Țara']; ?> date [$ i] [ 'Continent']; ?> date [$ i] [ 'regiune']; ?>   

Acum, pentru a utiliza clasa Paginator, adăugați următorul cod php în partea de sus a documentului.

getData (pagina $, limita $); ?>

Acest script este destul de simplu, tocmai am cerut clasa noastră Paginator, rețineți că acest cod presupune că acest fișier este în același director ca și index.php fișierul, dacă nu este cazul, trebuie să actualizați calea în consecință.

Apoi, creăm conexiunea la baza noastră de date folosind biblioteca MySQLi, preluăm parametrii paginator din cererea GET și setăm interogarea, deoarece acesta nu este un articol despre MySQL sau despre oricare dintre acestea nu voi primi detalii despre conexiune sau interogare folosit aici.

În cele din urmă, vom crea obiectul Paginator și vom prelua rezultatele pentru pagina curentă.

Afișarea rezultatelor

Acum, pentru a afișa rezultatele obținute, adăugați următorul cod corpului de masă.

date ); $ i ++):?>  date [$ i] [ 'Name']; ?> date [$ i] [ 'Țara']; ?> date [$ i] [ 'Continent']; ?> date [$ i] [ 'regiune']; ?>   

Aici, simplul lucru este iterarea prin atributul de date privind rezultatele care conține înregistrările orașelor și crearea unui rând de tabel pentru fiecare dintre ele.

Pagini de legătură

Acum, pentru a afișa legăturile paginator, adăugați următorul cod sub tabel.

createLinks ($ links, pagination pagination-sm); ?> 

Pentru metoda createLinks a Paginatorului, trecem rezultatul obținut Link-uri parametru și clasa css pentru legăturile de paginare utilizate din bootstrap. Iată rezultatul paginii create.

Concluzie

Acest lucru ar trebui să vă ofere tot ce trebuie să știți pentru a obține și a alerga cu paginare în cererea dumneavoastră.

Nu ezitați să lăsați întrebări, comentarii sau feedback general în feedul de mai jos!

Inca blocat? Încercați să contactați unul dintre dezvoltatorii noștri cu experiență PHP pe Envato Studio.