Paginazione di prodotti e news con PHP – Suddividere i record estratti dal database in più pagine

In un portale leggermente più complesso dai soliti siti-vetrina (in cui esistono solo pagine di presentazione), è probabile che vi troverete a creare una pagina di elenco prodotti, oppure una pagina dove sono stilate le news inserite di volta in volta.

In questa situazione avrete la necessità di suddividere i prodotti (o le news) in più pagine. Provate, infatti, a immaginare cosa accadrebbe se il sito in questione dovesse mostrare non 10 o 20 prodotti, ma 100 o addirittura qualche migliaio (negli e-commerce è cosa frequente). Oltre a rallentare la pagina nel caricamento, l’utente sarebbe costretto a scorrere il browser in su e in giù, con il risultato che prima o poi si stancherebbe o di perdere qualche elemento fondamentale.
Il classico spazio in alto e in fondo pagina, adibito ai numerini con freccia avanti e indietro per scorrere, ci diventa essenziale.

In questo articolo vedremo uno script di esempio su come creare una paginazione in php.
Nell’esempio si presume che in un database siano salvati alcuni utenti (ma potrebbero essere, come detto, prodotti o news): noi dovremmo estrarli e mostrarne solo una decina per pagina.
L’esempio è minimale e formattato senza badare troppo alla grafica (starà a voi adattarla), ma serve a chiarire il concetto per poter poi applicare le modifiche personalizzate. Ogni parte è dovutamente commentata.

Download script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
	//la query è necessaria per trovare il numero totale di utenti da estrarre
	$query_utente_iniziale="SELECT * FROM utenti";
	$result_iniziale=mysql_query($query_utente_iniziale, $db);
	$num=mysql_num_rows($result_iniziale);

	$per_pagina=10;
	$tot_pagine=ceil($num/$per_pagina); 

	if($num>0){ 

		//pagina corrente
		if(isset($_GET["idpag"])){
			$idpag=$_GET["idpag"];
		}else
			$idpag='1';

		//Calcolo i numeri iniziale e finale che andranno a limitare la query
		if($idpag==1)
			$inizio=0;
		else
			$inizio=($idpag*$per_pagina)-$per_pagina;

		//Query della pagina: la ripeto limitando ai record che devono essere mostrati //nella pagina
		$query_utente="SELECT * FROM utenti limit $inizio, $per_pagina";
		$result=mysql_query($query_utente, $db);

		/******** Stampo i risultati o faccio operazioni varie *********/

		//Link per scorrere le pagine: la pagina corrente ha un aspetto diverso
		?>
		<div style="float: right;">

        	<?php
		if($idpag>1){?>
			<span style="text-decoration: underline; margin-right: 10px"><a href="?pag=<?php echo ($pag-1);?>"><</a></span>
		<?php }else{?>
			<span><</span>
		<?php }

		$i=1;
		do{

			//Link per scorrere le pagine: la pagina corrente ha un aspetto diverso
			if($i==$idpag){?>
				<span style="text-decoration: none; font-weight: bold; margin-right: 10px"><a href="?idpag=<?php echo $i;?>"><?php echo $i;?></a></span>
			<?php }else{?>
				<span style="text-decoration: underline; margin-right: 10px"><a href="?idpag=<?php echo $i;?>"><?php echo $i;?></a></span>
			<?php }
			$i++;

		}while($i<=$tot_pagine);

		if($pag<$tot_pagine){?>
			<span style="text-decoration: underline; margin-right: 10px"><a href="?pag=<?php echo ($pag+1);?>">></a></span>
		<?php }else{?>
			<span>></span>
		<?php }?>

		</div>

	<?php
	} //if($num>0) 
?>
Etichette:, ,
Ultimi Commenti
  1. Marco Anelli
  2. angelo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *