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:
Î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.
Î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.
Î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.
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_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;
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.
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.
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.
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'] = '„;
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!
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'] = '
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!
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!