APPUNTI

Funzione per la paginazione in php

Avevo necessità di impaginare alcuni risultati di una query su un dbase mysql, ho pensato di crearmi una funzione cosi da potermela richiamare in varie parti del progetto ed eventualmente usarla anche in altri.

<?php
/* 
Descrizione: Questa funzione serve per inserire a volo una paginazione in un report mysql php
Utilizzo: Richiamando la funzione basta passare la pagina corrente, il numero totali di pagine e il nome del request di impaginazione
Supporto: Utilizza Bootstrap Italia 
Note: non utilizzare su wordpress la variabile con nome page nel request di impaginazione perche già usata da wp e genera un eccezione
Versione: 1.0
Autore: Enzo Paliotti
$page=pagina attuale
$tot_pagine=numero totale delle pagine in base al numero di record presenti nella ricerca e il numero di record da visualizzare per ogni pagina
$var_page=il nome della variabile pagina nel request 
*/
 
function epa_paginazione($page, $tot_pagine,$var_page){

	$link="";
	$pulisci=$_SERVER['REQUEST_URI'];
	$pulisci=$_SERVER['REQUEST_URI'];
	$pulisci=str_replace( '&'.$var_page.'='.$page, '', $pulisci) ;
	$pulisci=str_replace( '?'.$var_page.'='.$page, '', $pulisci) ;
	$link=$_SERVER['HTTP_HOST'].$pulisci;
	
	if ( strpos($link,'?') !=false ){
		$link=$link.'&'.$var_page.'=';
	}else {
		$link=$link.'?'.$var_page.'=';	
	}
	
	$str  =  "";
	
	if ($tot_pagine > 1){
		
		$str .= '<nav class="pagination-wrapper justify-content-center" aria-label="Navigazione centrata">';
		$str .= '  <ul class="pagination">';
		
		if ($tot_pagine>$page-5 && $page-5>0){
			$str .= '    <li class="page-item">';
			$str .= '      <a class="page-link" href="'.$link.($page-5).'" _tabindex="-1" aria-hidden="true">';
			$str .= '        <svg class="icon icon-primary"><use xlink:href="https://italia.github.io/bootstrap-italia/dist/svg/sprite.svg#it-chevron-left"></use></svg>';
			$str .= '        <span class="sr-only">Pagina precedente</span>';
			$str .= '      </a>';
			$str .= '    </li>';
		}
		
		if ($tot_pagine>$page-4 && $page-4>0){
			$str .= '    <li class="page-item"><a class="page-link" href="'.$link.($page-4).'">'.($page-4).'</a></li>';		
		}
		
		if ($tot_pagine>$page-3 && $page-3>0){
			$str .= '    <li class="page-item"><a class="page-link" href="'.$link.($page-3).'">'.($page-3).'</a></li>';		
		}
		
		if ($tot_pagine>$page-2 && $page-2>0){
			$str .= '    <li class="page-item"><a class="page-link" href="'.$link.($page-2).'">'.($page-2).'</a></li>';		
		}
		
		if ($tot_pagine>$page-1 && $page-1>0){
			$str .= '    <li class="page-item"><a class="page-link" href="'.$link.($page-1).'">'.($page-1).'</a></li>';			
		}
		
		$str .= '    <li class="page-item">';
		$str .= '      <a class="page-link" href="#" aria-current="page">';
		$str .= '        <span class="d-inline-block d-sm-none">Pagina </span>'.$page.'';
		$str .= '      </a>';
		$str .= '    </li>';
		
		if ($tot_pagine>=$page+1){
			$str .= '    <li class="page-item"><a class="page-link" href="'.$link.($page+1).'">'.($page+1).'</a></li>';		
		}
		
		if ($tot_pagine>=$page+2){
			$str .= '    <li class="page-item"><a class="page-link" href="'.$link.($page+2).'">'.($page+2).'</a></li>';		
		}
		
		if ($tot_pagine>=$page+3){
			$str .= '    <li class="page-item"><a class="page-link" href="'.$link.($page+3).'">'.($page+3).'</a></li>';		
		}
		
		if ($tot_pagine>=$page+4){
			$str .= '    <li class="page-item"><a class="page-link" href="'.$link.($page+4).'">'.($page+4).'</a></li>';		
		}
		
		if ($tot_pagine>=$page+5){
			$str .= '    <li class="page-item">';
			$str .= '      <a class="page-link" href="'.$link.($page+5).'">';
			$str .= '        <span class="sr-only">Pagina successiva</span>';
			$str .= '        <svg class="icon icon-primary"><use xlink:href="https://italia.github.io/bootstrap-italia/dist/svg/sprite.svg#it-chevron-right"></use></svg>';
			$str .= '      </a>';
			$str .= '    </li>';
		}
		
		$str .= '  </ul>';
		$str .= '</nav>';
		
	}
	
	return $str;

}
?>

Dopo averla inserita nel progetto, per richiamarla nel punto dove si desidera applicare la paginazione, basta inserire la seguente stringa:

echo epa_paginazione('nome_variabile_pagina_corrente', 'totale_pagine', 'nome_variabile_paginazione');	

Per la grafica ho utilizzato Bootstrap Italia.

Per avere il totale delle pagine è necessario recuperare i record da visualizzare con un Select count(campo_ID) as row e lanciare la query con:

$pg=1; // il numero della mia pagina
if(isset($_GET['pg'])){ // se presente nella query un altro numero di pagina lo aggiorno
    $pg = filter_var($_GET['pg'],FILTER_SANITIZE_NUMBER_INT);
}
$perpage = 25; // quanti record per pagina voglio vedere
$tot_cli= $wpdb->get_results($conta); // lancio la query per contare i record					  
$tot_rec = $tot_cli[0]->row; // recupero il numero
$tot_pagine=ceil($tot_rec/$perpage); // calcolo il numero totale di pagine della mia paginazione
$primo_rec=($pg-1)*$perpage; // calcolo il primo record da visualizzare nel report 

// Basta poi aggiungere alla fine della query dei dati 
LIMIT $primo_rec, $perpage 

Su questo sito utilizziamo cookie tecnici necessari alla navigazione e funzionali all’erogazione del servizio. Utilizziamo i cookie anche per fornirti un’esperienza di navigazione sempre migliore, per facilitare le interazioni con le nostre funzionalità social e per consentirti di ricevere comunicazioni di marketing aderenti alle tue abitudini di navigazione e ai tuoi interessi.

Puoi esprimere il tuo consenso cliccando su ACCETTA TUTTI I COOKIE. Chiudendo questa informativa, continui senza accettare.

Potrai sempre gestire le tue preferenze accedendo al nostro COOKIE CENTER e ottenere maggiori informazioni sui cookie utilizzati, visitando la nostra COOKIE POLICY.

Privacy Settings saved!
Impostazioni

Quando visiti un sito Web, esso può archiviare o recuperare informazioni sul tuo browser, principalmente sotto forma di cookies. Controlla qui i tuoi servizi di cookie personali.


I cookie tecnici sono necessari al funzionamento del sito web perché abilitano funzioni per facilitare la navigazione dell’utente, che per esempio potrà accedere al proprio profilo senza dover eseguire ogni volta il login oppure potrà selezionare la lingua con cui desidera navigare il sito senza doverla impostare ogni volta.

Rifiuta tutti i Servizi
Accetta tutti i Servizi