Come impaginare dati con PHP

Ricordo anni fa quando ho iniziato a scrivere codice PHP e MySQL, quanto ero eccitato quando ho ricevuto le informazioni da un database per essere visualizzato in un browser web. 

Per qualcuno che ha poche conoscenze di database e programmazione, vedere quelle righe della tabella che appaiono sullo schermo in base al codice che ho scritto (okay, quindi ho copiato un esempio da un libro - non dividiamo i capelli) mi ha dato un high trionfante. Forse non ho compreso appieno tutta la magia al lavoro, ma quel primo successo mi ha spronato a progetti più grandi e migliori.

Mentre il mio livello di esuberanza sui database potrebbe non essere lo stesso di una volta,
fin dal mio primo incontro "ciao mondo" con PHP e MySQL mi sono appassionato
sul potere di rendere le cose semplici e facili da usare. 

Come sviluppatore, un problema che sto affrontando costantemente è quello di prendere una grande quantità di informazioni e renderla facile da digerire. Sia che si tratti di una lista di clienti di una grande azienda o di un catalogo personale di mp3, doversi sedere e fissare file su file su file di dati può essere scoraggiante
e frustrante. Cosa può fare un buon sviluppatore? paginare!

Alla ricerca di una soluzione rapida?

Se stai cercando una soluzione rapida, c'è una grande collezione di script di impaginazione e di aiuti su Envato Market. 

Questa classe di impaginazione PHP è davvero utile. Può essere implementato con qualsiasi motore di database supportato da PHP, è molto facile da personalizzare e implementare, supporta due display di default, ha schemi di progettazione multicolor e altro.


1. Impaginazione

L'impaginazione è essenzialmente il processo di prendere una serie di risultati e di diffusione
loro fuori dalle pagine per renderli più facili da vedere.

Ho capito subito che se avessi avuto 5000 righe di informazioni da mostrare non solo
sarebbe un mal di testa per qualcuno a cercare di leggere, ma la maggior parte dei browser avrebbe preso
un'eternità di Internet (cioè più di circa cinque secondi) per visualizzarla. 

Per risolvere ciò, codificherei varie istruzioni SQL per estrarre blocchi di dati, e se lo fossi
di buon umore potrei anche inserire un paio di pulsanti "successivo" e "precedente".
Dopo un po ', dovendo rilasciare questo codice in ogni progetto simile e personalizzare
per adattarsi è diventato vecchio. Veloce. E come ogni bravo sviluppatore sa, la pigrizia genera inventiva
o qualcosa di simile. Così un giorno mi sono seduto e ho deciso di inventare un semplice,
classe PHP flessibile e facile da usare che farebbe automaticamente il lavoro sporco
me.

Una breve parola su di me e sulle lezioni di PHP. Non sono un mago orientato agli oggetti. In effetti, a malapena
mai usare la roba Ma dopo aver letto alcuni esempi di OOP e tutorial, e alcuni
semplici esempi di prove ed errori, ho deciso di dargli un vortice e tu sai cosa?
Funziona perfettamente per l'impaginazione. Il codice usato qui è scritto in PHP 4 ma lo farà
lavoro in PHP 5.


2. Il database

Devo amare MySQL. Senza offesa per gli altri sistemi di database là fuori, ma per
io, tutto ciò di cui ho bisogno è MySQL. E una grande caratteristica di MySQL è che ti danno un po '
database di esempio gratuiti con cui giocare su http://dev.mysql.com/doc/#sampledb.

Per i miei esempi, userò il database del mondo (~ 90k zippato) che contiene oltre
4000 dischi con cui giocare, ma la bellezza dello script PHP che creeremo è
che può essere utilizzato con qualsiasi database. Ora penso che possiamo essere tutti d'accordo sul fatto che se decidessimo
per non impaginare i nostri risultati ci ritroveremmo con qualcosa di molto lungo e poco maneggevole
risultati come il seguente:

(clicca per ingrandire, immagine ridicolmente lunga ~ 338k)

Quindi passiamo a suddividere i nostri dati in morsi facili da digerire come questo:

Bello non è? Una volta rilasciata la classe di impaginazione nel tuo codice, puoi farlo
trasforma rapidamente e facilmente un enorme insieme di dati in pagine di facile navigazione
solo poche righe di codice. Veramente.


3. Paginator

Questo esempio sarà composto da due script, la classe di impaginatore riutilizzabile e il file di indice che visualizzerà gli elementi della tabella e i controlli.

Paginator.class.php

La classe di impaginatore avrà solo due metodi e il costruttore, lo costruiremo gradualmente spiegando ogni passo mentre andiamo avanti.

 

Questa definizione imposta solo le variabili membro richieste dall'impaginatore, poiché questa è una classe helper ed è destinata solo all'impaginazione, si baserà su una connessione valida al server MySQL e una query già definita che aggiungeremo i parametri necessari per impaginare i risultati. Inizieremo con il metodo del costruttore.

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

Abbastanza semplice, vero? Questo metodo imposta solo la connessione al database dell'oggetto e la query necessaria, dopo di che calcola il numero totale di righe recuperate da quella query senza limiti né salta parametri, questo totale è necessario per creare i collegamenti per l'impaginatore.

Si noti che per semplicità non stiamo eseguendo il controllo degli errori o qualsiasi altra convalida dei parametri dati, ma in un'applicazione reale i controlli saranno necessari.

Recupero dei risultati

Ora creiamo il metodo che impaginerà effettivamente i dati e restituirà i risultati.

_limit = $ limit; $ this -> _ page = $ page; if ($ this -> _ limit == 'all') $ query = $ this -> _ query;  else $ query = $ this -> _ query. "LIMITE". (($ this -> _ page - 1) * $ this -> _ limit). ", $ this -> _ limit";  $ rs = $ this -> _ conn-> query ($ query); while ($ row = $ rs-> fetch_assoc ()) $ results [] = $ row;  $ result = new stdClass (); $ result-> page = $ this -> _ page; $ result-> limit = $ this -> _ limit; $ result-> total = $ this -> _ total; $ result-> data = $ results; ritorno $ risultato;  

Analizziamo questo passo alla volta, prima impostiamo i parametri limite e di pagina, che per impostazione predefinita sono impostati rispettivamente su 10 e 1. Quindi controlliamo se l'utente richiede un dato numero di righe o tutte, basandoci su questo e sul parametro della pagina che impostiamo LIMITE parametro della query, il "- 1" della pagina tiene conto del fatto che stiamo avviando le pagine in 1 anziché in 0.

Dopo questo, valutiamo semplicemente la query e otteniamo i risultati, infine creiamo un nuovo oggetto risultati che contiene il limite, la pagina e i parametri totali della query eseguita, nonché i dati per ciascuna delle righe recuperate.

Visualizzazione dei collegamenti di impaginazione

Ora scriviamo il metodo usato per ottenere i collegamenti di paginazione.

_limit == 'all') return "; $ last = ceil ($ this -> _ total / $ this -> _ limit); $ start = (($ this -> _ page - $ links)> 0)? $ this -> _ pagina - $ link: 1; $ end = (($ this -> _ pagina + $ link) < $last ) ? $this->_page + $ links: $ last; $ html = '
    '; $ class = ($ this -> _ page == 1)? "Disabilitato" : ""; $ html. = '
  • _limit. '& page ='. ($ this -> _ page - 1). '">«
  • '; if ($ start> 1) $ html. = '
  • _limit. '& Page = 1" > 1
  • '; $ html. = '
  • ...
  • '; for ($ i = $ start; $ i <= $end; $i++ ) $class = ( $this->_page == $ i)? "attivo" : ""; $ html. = '
  • _limit. '& page ='. $ i. '">'. $ i. '
  • '; if ($ end < $last ) $html .= '
  • ...
  • '; $ html. = '
  • _limit. '& page ='. $ ultimo. '">'. $ ultimo. '
  • '; $ class = ($ this -> _ page == $ last)? "Disabilitato" : ""; $ html. = '
  • _limit. '& page ='. ($ questo -> _ pagina + 1). '">»
  • '; $ html. = '
'; return $ html;

Questo è un metodo piuttosto lungo, qualcosa come 34 linee di codice, quindi ora spieghiamo cosa sta succedendo in questo metodo.

  1. Per prima cosa valutiamo se l'utente richiede un determinato numero di collegamenti o tutti loro, nel secondo caso restituiamo semplicemente una stringa vuota poiché non è richiesta alcuna impaginazione.
  2. Successivamente, calcoliamo l'ultima pagina in base al numero totale di righe disponibili e agli elementi richiesti per pagina.
  3. Quindi prendiamo il parametro links che rappresenta il numero di link da visualizzare sotto e sopra la pagina corrente e calcola il link di inizio e fine per creare.
  4. Ora creiamo il tag di apertura per l'elenco e ne impostiamo la classe con il parametro list class e aggiungiamo il link "pagina precedente", osservando che per questo link controlliamo se la pagina corrente è la prima e, in tal caso, impostiamo la proprietà disabilitata del collegamento.
  5. A questo punto viene visualizzato un collegamento alla prima pagina e un simbolo di puntini di sospensione nel caso in cui il collegamento iniziale non sia il primo.
  6. Successivamente aggiungiamo i collegamenti sotto e sopra la pagina corrente in base ai parametri di inizio e fine calcolati in precedenza, in ogni passaggio valutiamo nuovamente la pagina corrente e visualizziamo la classe attiva di conseguenza..
  7. Successivamente visualizziamo un altro simbolo di ellissi e il link all'ultima pagina nel caso in cui il link finale non sia l'ultimo.
  8. Infine mostriamo il link "pagina successiva" e impostiamo lo stato disabilitato quando l'utente sta visualizzando l'ultima pagina, chiudi l'elenco e restituisci la stringa HTML generata.

Questo è tutto ciò che c'è in Paginator.class, ovviamente potremmo aggiungere setter e getter per la connessione al database, il limite, la pagina, la query e i parametri totali, ma per semplicità lo manterremo in questo modo.

4. Index.php

Ora creeremo il file responsabile dell'uso della classe Paginator e della visualizzazione dei dati, quindi prima lascia che ti mostri l'HTML di base.

  Impaginazione PHP    

Impaginazione PHP

Città Nazione Continente Regione

Abbastanza semplice, questo file mostra solo una tabella che compileremo con le informazioni recuperate dal database, notare che per questo esempio sto usando bootstrap per lo stile di pagina di base.

Utilizzando The Paginator

dati); $ i ++):?>  dati [$ i] [ 'name']; ?> dati [$ i] [ 'Country']; ?> dati [$ i] [ 'Continente']; ?> dati [$ i] [ 'Regione']; ?>   

Ora per fare uso della nostra classe Paginator aggiungi il seguente codice php nella parte superiore del documento.

getData ($ page, $ limit); ?>

Questo script è abbastanza semplice, abbiamo appena richiesto la nostra classe Paginator, si noti che questo codice presuppone che questo file sia nella stessa directory del index.php file, se questo non è il caso, è necessario aggiornare il percorso di conseguenza.

Quindi creiamo la connessione al nostro database usando la libreria MySQLi, recuperiamo i parametri di paginator dalla richiesta GET e impostiamo la query, poiché non si tratta di un articolo su MySQL o di uno di questi non entrerò nei dettagli sulla connessione o sulla query usato qui.

Infine, creiamo l'oggetto Paginator e recuperiamo i risultati per la pagina corrente.

Visualizzazione dei risultati

Ora per visualizzare i risultati ottenuti aggiungere il seguente codice al corpo della tabella.

dati); $ i ++):?>  dati [$ i] [ 'name']; ?> dati [$ i] [ 'Country']; ?> dati [$ i] [ 'Continente']; ?> dati [$ i] [ 'Regione']; ?>   

Qui, semplicemente, stiamo iterando attraverso l'attributo dei dati dei risultati contenente i record delle città e creando una riga della tabella per ognuno di essi.

Collegamenti di paginazione

Ora per visualizzare i collegamenti di impaginatore aggiungere il seguente codice sotto la tabella.

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

Al metodo createLink di Paginator passiamo il risultato ottenuto link parametro e la classe css per i collegamenti di paginazione usati da bootstrap. Ecco il risultato della pagina creata.

Conclusione

Questo dovrebbe fornirti tutto ciò che devi sapere per essere operativo con paginazione nella tua applicazione.

Non esitare a lasciare domande, commenti o commenti generali nel feed sottostante!

Ancora bloccato? Prova a contattare uno dei nostri esperti sviluppatori PHP su Envato Studio.