Paginare în CodeIgniter Ghidul complet

Beneficiul utilizării oricărui cadru de aplicații web full-stack este că nu trebuie să vă faceți griji cu privire la sarcinile obișnuite cum ar fi manipularea intrărilor, validarea formelor și altele asemenea, deoarece cadrul deja oferă pachete pentru aceste caracteristici. Astfel, vă permite să vă concentrați mai degrabă pe logica de afaceri a aplicației, decât să reinventați roata din nou și din nou.

Astăzi, vom explora o importantă bibliotecă în cadrul CodeIgniter - biblioteca de paginare.

Permiteți-mi să subliniez subiectele pe care le vom acoperi în cursul acestui articol:

  • Demonstrarea paginării de bază
  • Explorați opțiunile de personalizare
  • Configurarea paginii

Demonstrarea paginilor de bază

În această secțiune, vom trece printr-un exemplu care demonstrează utilizarea paginării în CodeIgniter. Este cel mai bun mod de a înțelege cum funcționează lucrurile cu totul.

În exemplul nostru, vom construi o listă de utilizatori destul de simplă, în care vom prelua înregistrări din tabela utilizatorilor MySQL. Pentru a executa cu succes acest exemplu, asigurați-vă că aveți uid și uname câmpuri din tabelul dvs. de utilizatori.

Cu acest set, suntem gata să ne întoarcem.

Mergeți mai departe și creați un fișier de controler controlere / Paging.php cu următorul conținut.

a sarcinii> bibliotecă ( 'paginarea'); // încărcați ajutor helper $ this-> load-> helper ('url');  indexul funcției publice () // load db și modelul $ this-> load-> database (); $ This-> a sarcinii> modelul ( 'utilizatori'); // paranteze init $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Utilizatori-> get_total (); dacă ($ total_records> 0) // obține înregistrările actuale ale paginii $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = baza_url (). 'Paging / index'; $ config ['total_rows'] = $ total_record; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> inițializa ($ config); // construi link-uri de paginare $ params ["links"] = $ this-> paginare-> create_links ();  $ this-> load-> view ('user_listing', $ params);  funcția publică custom () // load db și model $ this-> load-> database (); $ This-> a sarcinii> modelul ( 'utilizatori'); // paranteze init $ params = array (); $ limit_per_page = 2; $ page = ($ this-> uri-> segment (3))? ($ this-> uri-> segment (3) - 1): 0; $ total_records = $ this-> Utilizatori-> get_total (); dacă ($ total_records> 0) // obține înregistrările actuale ale paginii $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ page * $ limit_per_page); $ config ['base_url'] = baza_url (). „Paginare / personalizată“; $ config ['total_rows'] = $ total_record; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; configurare personalizată de paginare $ config ['num_links'] = 2; $ config ['use_page_numbers'] = TRUE; $ config ['reuse_query_string'] = TRUE; $ config ['full_tag_open'] = '
„; $ config ['full_tag_close'] = '
„; $ config ['first_link'] = 'Prima pagină'; $ config ['first_tag_open'] = '„; $ config ['first_tag_close'] = '„; $ config ['last_link'] = 'Ultima pagină'; $ config ['last_tag_open'] = '„; $ config ['last_tag_close'] = '„; $ config ['next_link'] = 'Pagina următoare'; $ config ['next_tag_open'] = '„; $ config ['next_tag_close'] = '„; $ config ['prev_link'] = 'Pagina anterioară'; $ config ['prev_tag_open'] = '„; $ config ['prev_tag_close'] = '„; $ config ['cur_tag_open'] = '„; $ config ['cur_tag_close'] = '„; $ config ['num_tag_open'] = '„; $ config ['num_tag_close'] = '„; $ This-> pagination-> inițializa ($ config); // construi link-uri de paginare $ params ["links"] = $ this-> paginare-> create_links (); $ this-> load-> view ('user_listing', $ params);

Apoi, vom avea nevoie de un fișier model modele / Users.php care preia înregistrările din tabelul utilizatorilor.

db-> limită ($ limit, $ start); $ query = $ this-> db-> get ("utilizatori"); dacă ($ query-> num_rows ()> 0) foreach ($ interogare-> rezultat () ca $ row) $ data [] = $ row;  returnați date $;  return false;  funcția publică get_total () return $ this-> db-> count_all ("utilizatori"); 

În cele din urmă, să creăm un fișier de vizualizare la vizualizari / user_listing.php care afișează lista utilizatorilor.

   Exemplu de paginare - înregistrare utilizator   

Lista de utilizatori

ID-ul NUME
uid?> uname?>
Niciun utilizator găsit.

Acum, mergeți mai departe și accesați pagina personalizată la adresa http: // your-code-igniter-site / paging / index și ar trebui să vedeți lista de utilizatori împreună cu paginarea! Deci, asta e, am făcut-o! Nu vă faceți griji, nu vă voi lăsa în curând, deoarece vom începe să disecăm fiecare parte a codului acum.

Vom începe cu fișierul model modele / Users.php deoarece acest lucru va fi numit de la metodele noastre de controlor. Există două metode importante, get_current_page_records și get_total, pe care modelul nostru o implementează pentru a construi legăturile de paginare.

Să trecem prin get_total metodă. Este folosit pentru a număra numărul de înregistrări din tabelul utilizatorilor.

funcția publică get_total () return $ this-> db-> count_all ("utilizatori"); 

Apoi, e a get_current_page_records metodă.

funcția publică get_current_page_records ($ limit, $ start) $ this-> db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("utilizatori"); dacă ($ query-> num_rows ()> 0) foreach ($ interogare-> rezultat () ca $ row) $ data [] = $ row;  returnați date $;  return false; 

Există două argumente importante pe care ar trebui să le menționați în get_current_page_records metodă. Primul argument, limita $, este utilizat pentru a specifica numărul de înregistrări care vor fi returnate în timpul executării interogării. Și al doilea argument, $ de start, acționează ca indice inițial al înregistrării.

Deci, după cum puteți vedea, având în vedere valorile $ de start și limita $ putem obține înregistrări pe pagină. Aceasta este esența paginării, iar între timp am implementat cea mai importantă metodă a acestui articol!

Așa a fost modelul nostru - simplu și elegant!

Mergând înainte, să ne îndreptăm atenția asupra fișierului controlerului. Mergeți și luați codul metodei constructorului.

funcția publică __construct () parent :: __ construct (); // încărcați biblioteca de pagini $ this-> load-> library ('pagination'); // încărcați ajutor helper $ this-> load-> helper ('url'); 

Pentru a utiliza paginarea în CodeIgniter, primul lucru pe care trebuie să-l faceți este să încărcați biblioteca de paginare. Și o putem face folosind $ This-> a sarcinii> bibliotecă ( 'paginare').

De asemenea, am încărcat ajutorul de urgență pentru a putea utiliza funcțiile globale de ajutor furnizate de respectivul ajutor.

Acum, suntem gata să trecem prin inima controlorului nostru - index metodă.

indexul funcției publice () // load db și modelul $ this-> load-> database (); $ This-> a sarcinii> modelul ( 'utilizatori'); // paranteze init $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Utilizatori-> get_total (); dacă ($ total_records> 0) // obține înregistrările actuale ale paginii $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = baza_url (). 'Paging / index'; $ config ['total_rows'] = $ total_record; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> inițializa ($ config); // construi link-uri de paginare $ params ["links"] = $ this-> paginare-> create_links ();  $ this-> load-> view ('user_listing', $ params); 

Pentru a începe, asigurați-vă că baza de date este încărcată corect. În continuare, încărcăm Utilizatori astfel încât să putem folosi metodele modelului.

$ This-> a sarcinii> baze de date (); $ This-> a sarcinii> modelul ( 'utilizatori');

Apoi, inițializăm câteva variabile importante.

// paranteze init $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Utilizatori-> get_total ();

Variabila $ limit_per_page definește limita pe pagină. Bineînțeles, ați putea să o setați așa cum doriți; este setat la 1 în acest moment, de exemplu, în scopuri.

$ START_INDEX variabilă conține indexul de pornire al înregistrării MySQL. Când CodeIgniter construiește legăturile de paginare, el adaugă în mod implicit indexul de pornire al paginii ca al treilea segment din adresă URL. Puteți schimba acest comportament implicit, dar asta vom rezerva pentru ultima secțiune a acestui articol, unde vom discuta despre opțiunile de personalizare.

În cele din urmă, numim get_total metoda modelului Utilizatori pentru a obține înregistrările totale ale tabelului utilizatorilor și este atribuită acestuia $ total_records variabil.

Apoi, vom prelua înregistrările paginii curente folosind get_current_page_records metodă.

// obține înregistrările actuale ale paginii $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index);

Înainte de a putea să mergem înainte și să construim legături de paginare, trebuie să inițializăm configurația minimală de paginare folosind inițializa metoda bibliotecii de paginare.

$ config ['base_url'] = baza_url (). 'Paging / index'; $ config ['total_rows'] = $ total_record; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> inițializa ($ config);

Și acesta este setul de parametri minime pentru a construi legăturile de paginare.

  • base_url: Adresa URL care va fi utilizată în timpul creării legăturilor de paginare
  • TOTAL_ROWS: Numărul total de înregistrări
  • per pagină: Numărul de înregistrări pe pagină

În cele din urmă, folosim create_links pentru a construi link-uri de paginare.

// construi link-uri de paginare $ params ["links"] = $ this-> paginare-> create_links ();

Restul este doar formalitatea de a ne exprima punctul de vedere user_listing și de a face ieșire! Rulați URL-ul http: // codul-igniter-site / paging / index pentru a vedea lista de utilizatori împreună cu link-urile de paginare.

Deci, este un exemplu de paginare foarte simplu dar util, la dispoziția dumneavoastră, pe care ați putea să-l extindeți pentru a se potrivi cerințelor dumneavoastră.

În secțiunea următoare, vom examina modul în care puteți personaliza paginarea implicită în ceea ce privește aspectul și funcționalitatea.

Explorați opțiunile de personalizare

În această secțiune, vom examina opțiunile disponibile pe care le puteți utiliza dacă doriți să personalizați legăturile de paginare implicite.

Segmentul URI

Deși biblioteca de paginare CodeIgniter detectează automat parametrul referitor la paginare din adresa URL, puteți defini o valoare personalizată dacă aveți un model de adresă URL diferit.

$ config ["uri_segment"] = 4;

Numărul de legături digitale

NUM_LINKS vă permite să definiți numărul cifră link-uri care vor fi afișate înainte și după numărul paginii active din legăturile de paginare.

$ config ['num_links'] = 2;

Numărul paginii ca segment URI

Când accesați segmentul URI de paginare, acesta este un index inițial. De exemplu, dacă aveți zece înregistrări pe pagină, segmentul URI de paginare este de 20 pentru a treia pagină. În schimb, dacă doriți să afișați numere de pagină reale în legăturile de paginare, puteți seta use_page_numbers la ADEVĂRAT.

$ config ['use_page_numbers'] = TRUE;

Desigur, trebuie să vă asigurați că calculați indicele de pornire corespunzător, pe baza numărului de pagină pe care îl preluați de la adresa URL.

Păstrați șirul de interogări

De cele mai multe ori, veți ajunge în situația în care doriți să păstrați parametrii șirului de interogare care nu au legătură cu paginarea. Puteți utiliza funcția reuse_query_string opțiune pentru a permite această facilitate.

$ config ['reuse_query_string'] = TRUE;

Acestea au fost câteva opțiuni pe care le-ați putea folosi pentru a modifica funcția implicită de paginare. Apoi, vom examina câteva alte opțiuni care vă permit să modificați modul în care sunt afișate legăturile de paginare.

Wrapper Tag

Dacă doriți să înfășurați codul de paginare cu orice altă etichetă HTML, puteți face acest lucru folosind full_tag_open și full_tag_close Opțiuni.

$ config ['full_tag_open'] = '
„; $ config ['full_tag_close'] = '
„;

Ar putea fi foarte util dacă doriți să aplicați stil personalizat pe legăturile de paginare.

Mai întâi, ultima, următoarea și anterioară

Dacă doriți să schimbați textul care va fi afișat pentru prima, ultima, următoarea și cea anterioară, puteți face și acest lucru.

$ config ['first_link'] = 'Prima pagină'; $ config ['last_link'] = 'Ultima pagină'; $ config ['next_link'] = 'Pagina următoare'; $ config ['prev_link'] = 'Pagina anterioară';

De asemenea, dacă doriți să înfășurați aceste linkuri individuale cu orice etichetă HTML, puteți face acest lucru în același mod în care am făcut-o pentru a împacheta întregul cod de paginare.

$ config ['first_tag_open'] = '„; $ config ['first_tag_close'] = '„; $ config ['last_tag_open'] = '„; $ config ['last_tag_close'] = '„; $ config ['next_tag_open'] = '„; $ config ['next_tag_close'] = '„; $ config ['prev_tag_open'] = '„; $ config ['prev_tag_close'] = '„;

Link activ și legătură numerică

Uneori, doriți să modelați legătura activă în mod diferit. Ați putea face acest lucru prin aplicarea etichetelor de împachetare după cum se arată mai jos.

$ config ['cur_tag_open'] = '„; $ config ['cur_tag_close'] = '„;

În același mod, dacă doriți să înfășurați legăturile digitale cu ceva:

$ config ['num_tag_open'] = '„; $ config ['num_tag_close'] = '„;

Și asta încheie povestea personalizării. De fapt, puteți merge mai departe și uitați-vă la exemplul de personalizare de la adresa http: // codul-igniter-site / paging / personalizat care este deja inclus în fișierul nostru de controler!

Configurarea paginii

Acum sunteți conștient de configurația necesară pentru a seta o paginare decentă cu orice listă de modele. Și de cele mai multe ori, doriți să păstrați același lucru pe întreg site-ul. Ce vei face pentru a realiza asta? S-ar putea să fiți tentat să copiați codul de configurare și să îl inserați în fiecare acțiune care necesită configurarea de paginare.

De fapt, există o modalitate mai bună de a face față acestui scenariu. Aveți posibilitatea să creați un fișier de configurare de paginare la application / config / pagination.php și utilizați $ config pentru a defini setările.

„; $ config ['full_tag_close'] = '
„; $ config ['first_link'] = 'Prima pagină'; $ config ['first_tag_open'] = '„; $ config ['first_tag_close'] = '„; $ config ['last_link'] = 'Ultima pagină'; $ config ['last_tag_open'] = '„; $ config ['last_tag_close'] = '„; $ config ['next_link'] = 'Pagina următoare'; $ config ['next_tag_open'] = '„; $ config ['next_tag_close'] = '„; $ config ['prev_link'] = 'Pagina anterioară'; $ config ['prev_tag_open'] = '„; $ config ['prev_tag_close'] = '„; $ config ['cur_tag_open'] = '„; $ config ['cur_tag_close'] = '„; $ config ['num_tag_open'] = '„; $ config ['num_tag_close'] = '„;

Bazat pe asta, revizuit index metoda de acțiune ar trebui să arate astfel:

indexul funcției publice () // load db și modelul $ this-> load-> database (); $ This-> a sarcinii> modelul ( 'utilizatori'); // paranteze init $ params = array (); $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Utilizatori-> get_total (); // încărcați fișierul config $ this-> config-> load ('pagination', TRUE); $ set = $ this-> config-> item ("paginare"); setările $ ['total_rows'] = $ this-> Users-> get_total (); Setările $ ['base_url'] = base_url (). 'Paging / config'; dacă $ total_records> 0) // obține înregistrările actuale ale paginii $ params ["results"] = $ this-> Users-> get_current_page_records ($ settings ['per_page'], $ start_index); // utilizați setările pentru a inițializa biblioteca $ this-> pagination-> initialize (setări $); // construi link-uri de paginare $ params ["links"] = $ this-> paginare-> create_links ();  $ this-> load-> view ('user_listing', $ params); 

Desigur, TOTAL_ROWS și base_url variabilele variază de la acțiune la acțiune, deci trebuie să le setați în mod explicit în fiecare acțiune.

Pentru a realiza acest lucru, trebuie să încărcați configurația de paginare în primul rând.

$ this-> config-> load ("paginare", TRUE); $ set = $ this-> config-> item ("paginare");

Apoi, puteți să înlocuiți setările specifice acțiunii.

setările $ ['total_rows'] = $ this-> Users-> get_total (); Setările $ ['base_url'] = base_url (). 'Paging / config';

Și ați terminat cu asta!

Așa a fost povestea configurației de paginare, și acest lucru se încheie și cu acest articol!

Concluzie

Astăzi, am trecut prin biblioteca de paginare din CodeIgniter.

În prima parte a acestui articol, am demonstrat cum puteți utiliza biblioteca de paginare oferind un exemplu foarte simplu dar util.

În urma acestui aspect, am discutat opțiunile de personalizare disponibile la dispoziția dvs. în timpul configurării paginării.

În cele din urmă, am discutat despre configurația de paginare din ultima secțiune.

CodeIgniter este o platformă puternică pentru PHP. Indiferent dacă începeți sau începeți cu următoarea versiune, nu uitați să verificați ce avem la dispoziție pentru dvs..

Mi-ar plăcea să știu feedback-ul dvs. sub formă de interogări și comentarii utilizând feedul de mai jos!

Cod