Il vantaggio dell'utilizzo di qualsiasi framework di applicazioni Web a stack completo è che non è necessario preoccuparsi delle attività comuni come la gestione degli input, la convalida dei moduli e simili, poiché il framework fornisce già wrapper per tali funzionalità. In questo modo, è possibile concentrarsi sulla logica di business dell'applicazione anziché reinventare la ruota più e più volte.
Oggi, esploreremo una libreria importante nel framework CodeIgniter: la libreria di impaginazione.
Permettetemi di evidenziare gli argomenti che tratteremo nel corso di questo articolo:
In questa sezione, vedremo un esempio che dimostra l'uso della paginazione in CodeIgniter. È il modo migliore per capire come funzionano le cose.
Nel nostro esempio, costruiremo un semplice elenco di utenti in cui recupereremo i record dalla tabella MySQL degli utenti. Per eseguire correttamente questo esempio, assicurati di avere il uid
e il tuo nome
campi nella tabella degli utenti.
Con quella configurazione, siamo pronti a lanciare.
Vai avanti e crea un file controller controllori / Paging.php
con i seguenti contenuti.
load-> library ( 'impaginazione'); // carica URL helper $ this-> load-> helper ('url'); public function index () // carica db e model $ this-> load-> database (); $ This-> load-> modello ( 'Utenti'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // ottiene i record della pagina corrente $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'Paging / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> inizializzare ($ config); // crea collegamenti paging $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params); public function custom () // carica db e model $ this-> load-> database (); $ This-> load-> modello ( 'Utenti'); // init params $ params = array (); $ limit_per_page = 2; $ page = ($ this-> uri-> segment (3))? ($ this-> uri-> segment (3) - 1): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // ottiene i record della pagina corrente $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ page * $ limit_per_page); $ config ['base_url'] = base_url (). 'Paging / custom'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; // configurazione di paginazione personalizzata $ 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 pagina'; $ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_link'] = 'Ultima pagina'; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_link'] = 'Pagina successiva'; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_link'] = 'Pagina precedente'; $ config ['prev_tag_open'] = ''; $ config ['prec_tag_close'] = ''; $ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = ''; $ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = ''; $ This-> pagination-> inizializzare ($ config); // crea collegamenti paging $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params);
Successivamente, avremo bisogno di un file di modello modelli / Users.php
che recupera i record dalla tabella degli utenti.
db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("utenti"); if ($ query-> num_rows ()> 0) foreach ($ query-> result () come $ row) $ data [] = $ row; restituire $ dati; return false; public function get_total () return $ this-> db-> count_all ("users");
Infine, creiamo un file di visualizzazione su views / user_listing.php
che mostra l'elenco degli utenti.
Esempio di paging: elenco utenti Elenco utenti
ID NOME uid?> uname?> Nessun utente trovato.
Ora vai avanti e accedi alla nostra pagina personalizzata all'indirizzo http: // your-code-igniter-site / paging / index e dovresti vedere l'elenco degli utenti insieme all'impaginazione! Quindi, è così, ce l'abbiamo fatta! Non preoccuparti, non ti lascerò presto, poiché inizieremo a sezionare ogni parte del codice ora.
Inizieremo con il file del modello modelli / Users.php
poiché verrà chiamato qualcosa dai nostri metodi di controllo. Ci sono due metodi importanti, get_current_page_records
e get_total
, che il nostro modello implementa per costruire i collegamenti di paginazione.
Passiamo al get_total
metodo. È usato per contare il numero di record nella tabella degli utenti.
funzione pubblica get_total () return $ this-> db-> count_all ("users");
Quindi, c'è un get_current_page_records
metodo.
funzione pubblica get_current_page_records ($ limit, $ start) $ this-> db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("utenti"); if ($ query-> num_rows ()> 0) foreach ($ query-> result () come $ row) $ data [] = $ row; restituire $ dati; return false;
Ci sono due argomenti importanti che dovresti notare nel get_current_page_records
metodo. Il primo argomento, $ limite
, viene utilizzato per specificare il numero di record che verranno restituiti durante l'esecuzione della query. E il secondo argomento, $ start
, funge da indice di partenza del record.
Quindi, come puoi vedere, dati i valori di $ start
e $ limite
possiamo recuperare i record per pagina. Questa è l'essenza del paging e nel frattempo abbiamo implementato il metodo più importante di questo articolo!
Quindi, quello era il nostro modello: semplice ed elegante!
Andando avanti, spostiamo la nostra attenzione sul file del controller. Vai avanti e prendi il codice del metodo del costruttore.
funzione pubblica __construct () parent :: __ construct (); // carica la libreria di paginazione $ this-> load-> library ('pagination'); // carica URL helper $ this-> load-> helper ('url');
Per utilizzare la paginazione in CodeIgniter, la prima cosa che devi fare è caricare la libreria di paginazione. E possiamo farlo usando $ This-> load-> library ( 'impaginazione')
.
Abbiamo anche caricato l'helper URL in modo da poter utilizzare le funzioni di supporto globali fornite da quell'helper.
Ora siamo pronti per passare attraverso il cuore del nostro controller: il indice
metodo.
indice di funzione pubblica () // carica db e model $ this-> load-> database (); $ This-> load-> modello ( 'Utenti'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // ottiene i record della pagina corrente $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'Paging / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> inizializzare ($ config); // crea collegamenti paging $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params);
Per cominciare, ci assicuriamo che il database sia caricato correttamente. In seguito, carichiamo il utenti
modello in modo che possiamo usare i metodi del modello.
$ This-> load-> database (); $ This-> load-> modello ( 'Utenti');
Successivamente, inizializziamo un paio di variabili importanti.
// init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total ();
La variabile $ limit_per_page
definisce il limite per pagina. Naturalmente, puoi impostarlo come desideri; è impostato su 1 al momento, ad esempio.
Il $ START_INDEX
variabile contiene l'indice iniziale del record MySQL. Quando CodeIgniter crea i collegamenti di paginazione, aggiunge l'indice iniziale della pagina come terzo segmento nell'URL per impostazione predefinita. Puoi modificare questo comportamento predefinito, ma è qualcosa che riserveremo per l'ultima sezione di questo articolo, in cui discuteremo le opzioni di personalizzazione.
Infine, chiamiamo il get_total
metodo del modello Users per ottenere i record totali della tabella utenti ed è assegnato a $ total_records
variabile.
Successivamente, recuperiamo i record della pagina corrente usando il get_current_page_records
metodo.
// ottiene i record della pagina corrente $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index);
Prima di poter effettivamente andare avanti e costruire i collegamenti di paginazione, è necessario inizializzare la configurazione di paging minima usando inizializzare
metodo della libreria di paging.
$ config ['base_url'] = base_url (). 'Paging / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> inizializzare ($ config);
E questo è l'insieme di parametri minimi per costruire i collegamenti di paginazione.
Finalmente, usiamo il create_links
metodo per costruire link di paginazione.
// crea collegamenti paging $ params ["links"] = $ this-> pagination-> create_links ();
Il resto è solo la formalità per chiamare la nostra visione user_listing
e rendere l'output! Esegui l'URL http: // your-code-igniter-site / paging / index per vedere l'elenco degli utenti insieme ai link di paginazione.
Quindi questo è un esempio di impaginazione molto semplice ma utile a tua disposizione che potresti estendere per soddisfare le tue esigenze.
Nella prossima sezione, esploreremo come personalizzare l'impaginazione predefinita in termini di aspetto e funzionalità.
In questa sezione, esploreremo le opzioni disponibili che potresti utilizzare se desideri personalizzare i collegamenti di paginazione predefiniti.
Sebbene la libreria di paging CodeIgniter rilevi automaticamente il parametro relativo al paging dall'URL, puoi definire un valore personalizzato se hai un pattern URL diverso.
$ config ["uri_segment"] = 4;
Il NUM_LINKS
opzione ti permette di definire il numero di cifra collegamenti che verranno visualizzati prima e dopo il numero di pagina attivo nei collegamenti di paginazione.
$ config ['num_links'] = 2;
Quando accedi al segmento URI di paging, è un indice iniziale per impostazione predefinita. Ad esempio, se si dispone di dieci record per pagina, il segmento URI di paging è 20 per la terza pagina. Invece, se si desidera mostrare i numeri di pagina reali nei collegamenti di paginazione, è possibile impostare use_page_numbers
a VERO
.
$ config ['use_page_numbers'] = TRUE;
Ovviamente, è necessario assicurarsi di calcolare l'indice iniziale corretto in base al numero di pagina che si recupera dall'URL.
Più spesso, si finisce nella situazione in cui si desidera conservare i parametri della stringa di query che non sono correlati all'impaginazione. Puoi usare il reuse_query_string
opzione per abilitare tale funzione.
$ config ['reuse_query_string'] = TRUE;
Queste erano alcune opzioni che è possibile utilizzare per modificare la funzionalità di impaginazione predefinita. Successivamente, esamineremo un paio di altre opzioni che consentono di modificare il modo in cui vengono visualizzati i collegamenti di impaginazione.
Se vuoi avvolgere il codice di impaginazione con qualsiasi altro tag HTML, puoi farlo usando il full_tag_open
e full_tag_close
opzioni.
$ config ['full_tag_open'] = ''; $ config ['full_tag_close'] = '';
Potrebbe essere davvero utile se si desidera applicare uno stile personalizzato ai collegamenti di paginazione.
Se vuoi cambiare il testo che verrà visualizzato per i link primo, ultimo, successivo e precedente, potresti farlo anche tu.
$ config ['first_link'] = 'Prima pagina'; $ config ['last_link'] = 'Ultima pagina'; $ config ['next_link'] = 'Pagina successiva'; $ config ['prev_link'] = 'Pagina precedente';
Inoltre, se desideri racchiudere questi singoli collegamenti con qualsiasi tag HTML, puoi farlo nello stesso modo in cui lo abbiamo fatto per racchiudere l'intero codice di paging.
$ 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 ['prec_tag_close'] = '';
A volte, vuoi dare uno stile diverso al link attivo. Puoi farlo applicando i tag wrapper come mostrato di seguito.
$ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = '';
Allo stesso modo, se desideri racchiudere i collegamenti a cifre con qualcosa:
$ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = '';
E questo conclude la storia della personalizzazione. In effetti, puoi andare avanti e guardare l'esempio di personalizzazione su http: // tuo-codice-igniter-site / paging / custom che è già incluso nel nostro file di controller!
Ora sei a conoscenza della configurazione necessaria per impostare una paginazione decente con qualsiasi modello di elenco. E la maggior parte delle volte, vuoi mantenerlo uguale in tutto il sito. Che cosa hai intenzione di fare per raggiungere questo obiettivo? Potresti essere tentato di copiare il codice di configurazione e incollarlo in ogni azione che richiede la configurazione di impaginazione.
In effetti, c'è un modo migliore per gestire questo scenario. È possibile creare un file di configurazione di paging su application / config / pagination.php
e usa il $ config
variabile per definire le tue impostazioni.
'; $ config ['full_tag_close'] = '
Sulla base di ciò, la revisione indice
il metodo di azione dovrebbe assomigliare a questo:
indice di funzione pubblica () // carica db e model $ this-> load-> database (); $ This-> load-> modello ( 'Utenti'); // init params $ params = array (); $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); // carica il file di configurazione $ this-> config-> load ('pagination', TRUE); $ settings = $ this-> config-> item ('pagination'); $ settings ['total_rows'] = $ this-> Users-> get_total (); $ settings ['base_url'] = base_url (). 'Paging / config'; if ($ total_records> 0) // ottiene i record della pagina corrente $ params ["results"] = $ this-> Users-> get_current_page_records ($ settings ['per_page'], $ start_index); // usa le impostazioni per inizializzare la libreria $ this-> pagination-> initialize ($ settings); // crea collegamenti paging $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params);
Certo, il TOTAL_ROWS
e base_url
le variabili cambiano da azione ad azione, quindi è necessario impostarle esplicitamente in ogni azione.
Per fare ciò, è necessario caricare la configurazione di impaginazione in primo luogo.
$ this-> config-> load ('pagination', TRUE); $ settings = $ this-> config-> item ('pagination');
Successivamente, è possibile ignorare le impostazioni specifiche dell'azione.
$ settings ['total_rows'] = $ this-> Users-> get_total (); $ settings ['base_url'] = base_url (). 'Paging / config';
E hai finito con quello!
Questa è stata la storia della configurazione di impaginazione e questo conclude anche questo articolo!
Oggi abbiamo esaminato la libreria di impaginazione in CodeIgniter.
Nella prima parte di questo articolo, ho dimostrato come è possibile utilizzare la libreria di impaginazione fornendo un esempio molto semplice ma utile.
In seguito, abbiamo discusso le opzioni di personalizzazione disponibili a disposizione durante la configurazione dell'impaginazione.
Infine, abbiamo discusso la configurazione della paginazione nell'ultima sezione.
CodeIgniter è una potente piattaforma PHP. Sia che tu stia appena iniziando o che tu stia iniziando con la prossima versione, non dimenticare di dare un'occhiata a ciò che abbiamo a tua disposizione, e.
Mi piacerebbe conoscere il tuo feedback sotto forma di domande e commenti utilizzando il feed sottostante!