Impaginazione in CodeIgniter la guida completa

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:

  • Dimostrazione di paging di base
  • Esplora le opzioni di personalizzazione
  • Configurazione di impaginazione

Dimostrazione di Paging di base

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.

  • base_url: L'URL che verrà utilizzato durante la creazione di collegamenti di paginazione
  • TOTAL_ROWS: Numero totale di record
  • per pagina: Conteggio record per pagina

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à.

Esplora le opzioni di personalizzazione

In questa sezione, esploreremo le opzioni disponibili che potresti utilizzare se desideri personalizzare i collegamenti di paginazione predefiniti.

Segmento URI

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;

Numero di collegamenti di cifre

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;

Numero di pagina come segmento URI

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.

Mantieni stringa di query

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.

Tag wrapper

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.

Primo, Ultimo, Avanti e Precedente

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'] = '';

Link attivo e numero link

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!

Configurazione di paging

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'] = '
'; $ 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'] = '';

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!

Conclusione

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!