Impaginazione dei dati di un result-set con PHP

Spesso capita di dover mostrare a video un numero limitato di dati rispetto a quelli presenti in un archivio.

Così, sia se lavorate sui vostri database, sia se dovete gestire i dati provenienti da una webapp cui accedete attraverso API, è frequente dover mostrare l’output dei vostri script su più pagine.

I dati che occorrono sono solo 3:

  1. Numero totale degli elementi del result-set
  2. Numero degli elementi da mostrare per ogni pagina
  3. Indice del primo elemento della pagina

Questa è la mia soluzione al problema:

<?php

$totalResults = 100;

// se è passata la variabile itemsperpage, ne preleva il valore 
// altrimenti attribuisce valore 10 
$itemsPerPage = $_GET['itemsperpage'] ? $_GET['itemsperpage'] : 10;

// se è passato lo startindex, ne preleva il valore 
// altrimenti attribuisce valore 1
$startIndex = $_GET['startindex'] ? $_GET['startindex'] : 1;

// lo startIndex della pagina precedente 
// e della pagina successiva
$prevStartIndex = $startIndex - $itemsPerPage;
$nextStartIndex = $startIndex + $itemsPerPage;

// numero della pagina corrente 
// la funzione floor approssima al numero intero immediatamente precedente
$numPage = floor((($startIndex - 1)/$itemsPerPage) + 1);

// numero dell'ultima pagina
$lastPage = (is_int($totalResults/$itemsPerPage)) ? ($totalResults/$itemsPerPage) : (floor($totalResults/$itemsPerPage + 1));

/* in alternativa alla stringa precedente, si può ricorrere alla normale struttura condizionale if (is_int($totalResults/$itemsPerPage)){ $lastPage = $totalResults/$itemsPerPage; }else{ $lastPage = floor($totalResults/$itemsPerPage + 1); } */

// genera il link alla pagina precedente 
// se la pagina attuale è successiva alla prima pagina
if($numPage > 1){
  $prevPageURL = 'miofile.php?startindex=' . $prevStartIndex . '&amp;itemsperpage=' . $itemsPerPage;
  $prevPageLink = '<a href="' . $prevPageURL . '">Precedente</a>';
}else{
  $prevPageLink = "Precedente";
}

// genera il link alla pagina successiva 
// se la pagina attuale è precedente all'ultima pagina
if($numPage < $lastPage){
  $nextPageURL = 'miofile.php&amp;startindex=' . $nextStartIndex . '&amp;itemsperpage=' . $itemsPerPage;
  $nextPageLink = '<a href="' . $nextPageURL . '">Successiva</a>';
}else{
  $nextPageLink = "Successiva";
}
Annunci
Questo articolo è stato pubblicato in WebDev e contrassegnato come da carlo . Aggiungi il permalink ai segnalibri.