Problema su numerazione paginazione php

  • Creatore Discussione Creatore Discussione migo80
  • Data di inizio Data di inizio

migo80

Utente Attivo
25 Apr 2013
243
3
18
Ciao richiedo un vostro aiuto riguardo ad uno script di paginazione preso da qui :

https://www.mrw.it/php/paginazione-dati-mysql_6871.html

l'ho riadattato alle mie esigenze il tutto funziona l'unica cosa a non andare è che scorrendo le varie pagine i numeri precedenti non scompaiono ad esempio 1: << < 1...12 13 14 15 > >>
invece a video ottengo questo risultato esempio 2 :
<< < 1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 > >> e così via .

Questo sotto inserito è quello che sto usando io, è possibile modificarlo per ottenere il risultato dell'esempio 1?

PHP:
<?php
$x_pag = 10;

$pag = isset($_GET['pag']) ? $_GET['pag'] : 1;
if (!$pag || !is_numeric($pag)) $pag = 1; 

			$mysqli = new mysqli($this->host, $this->user, $this->pass, $this->db);
			$results = $mysqli->query("SELECT * FROM ".$this->table." ORDER BY id DESC");
			$all_rows = $results->num_rows;

$all_pages = ceil($all_rows / $x_pag);

$first = (($pag  * $x_pag)-$x_pag) ;
			
 			$result = $mysqli->query("SELECT * FROM ".$this->table." ORDER BY id DESC LIMIT $first, $x_pag");
$nr = $result->num_rows;
if ($nr != 0){
 for($x = 0; $x < $nr; $x++){
		$row = $result->fetch_assoc(); 
			$id = $row['id'];
			$titolo = $row['titolo'];
			$prezzo = $row['prezzo'];
			$annuncio = $row['annuncio'];
			$data = date ("d/m/Y",$row['data']);
			$country = $row['regione'];
			$provincia = 'enevnto';
			$citta = $row['citta'];	?>
            
 	<div class="row-fluid">
        
    	<div class="span3 text-center">
            <img class="dimensione img-polaroid" src="engine/link1.php?id=<?php echo $id; ?>" alt="<?php echo $titolo; ?>"/> 
            <a href="contatta-inserzionista.php?pag=<?php echo $id; ?>"> <p class=" btn btn-danger">vedi Annuncio <b>></b></p></a> 
        </div>
        <div class="span9 des-ads">
            	<h5 class="titolo-annunci data-ads"><?php echo $titolo.'<span class="divid-v"></span>'.''.$prezzo; ?></h5>
        <h6><?php echo $country.'<span class="divid-v"></span>'.''.$provincia.'<span class="divid-v"></span>'.''.$citta; ?></h6>

        	<p><?php echo $annuncio; ?></p>
        </div>
    </div>
            
			
	<?php 		 
 }}else{
  echo "Nessun record trovato!";
}
?>
<div class="row-fluid">
	<div class="span12 pagination">
    	<?php 
if ($all_pages > 1){
	echo "<ul>";
  if ($pag > 1){
    echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag -1) . "\">";
    echo "Pagina Indietro</a></li>";
  }
  $maximum_links =10;
  if($all_pages<=$maximum_links) 
            { 
                $maximum_links=$all_pages+1; 
            } 
           else{ 
                  //$maximum_links +1 
                  $maximum_links=$maximum_links+1; 
                   if($pag>=$maximum_links){ 
                       $maximum_links=$pag+1; 
                    } 
              } 
  // faccio un ciclo di tutte le pagine
  for ($p=1; $p<=$maximum_links; $p++) {
    // per la pagina corrente non mostro nessun link ma la evidenzio in blod
    // all'interno della sequenza delle pagine
    if ($p == $pag) echo "<li class='active'><a href'#'><b>" . $p . "</b></a></li>";
    // per tutte le altre pagine stampo il link
    else { 
      echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . $p . "\">";
      echo $p . "</a></li>";
    } 
  }
  if ($all_pages > $pag){
    echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag +1) . "\">";
    echo "Pagina Avanti</a></li>";
  }
  echo "</ul>"; 
}; ?>
    </div>
</div>
 
Ultima modifica:
Ciao, bisogna andare a calcolare e modificare le variabili di inizio e di fine ciclo quando si mostrano i link alle pagine.
PHP:
            $maximum_links = 9;
            // inizio ciclo
            $init = $pag <= $maximum_links / 2 ? 1 : ceil($pag - $maximum_links / 2);
            // fine ciclo
            $end = $pag > $maximum_links / 2 ? $pag + $maximum_links / 2 : $maximum_links;
            // faccio un ciclo di massimo 9 iterazioni
            for ($p = $init; $p <= $end; $p++) {
                // per la pagina corrente non mostro nessun link ma la evidenzio in blod
                // all'interno della sequenza delle pagine
Considera anche che in una paginazione è bene mostrare sempre la prima e l'ultima pagina.
Ho solo provato con le pagine iniziali, bisogna vedere come si comporta con quelle finali.
 
Ultima modifica:
Ciao grazie ancora una volta per il tuo aiuto ho apportato una piccola modifica per ottenere l'effetto dell'esempio1 del post precedente.
Posto il codice completo con le modifiche sperando di fare cosa utile.
P.s nel codice faccio uso delle classi di bootstrap.

PHP:
<?php
$x_pag = 10;

$pag = isset($_GET['pag']) ? $_GET['pag'] : 1;
if (!$pag || !is_numeric($pag)) $pag = 1; 

			$mysqli = new mysqli('nome_host, username, password, nome_database');
			$results = $mysqli->query("SELECT * FROM nome_tabella");
			$all_rows = $results->num_rows;

$all_pages = ceil($all_rows / $x_pag);

$first = (($pag  * $x_pag)-$x_pag) ;
			
 			$result = $mysqli->query("SELECT * FROM nome_tabella ORDER BY id DESC LIMIT $first, $x_pag");
$nr = $result->num_rows;
if ($nr != 0){
 for($x = 0; $x < $nr; $x++){
		$row = $result->fetch_assoc(); 
			$id = $row['id'];
			$esempio1 = $row['esempio1'];
			$esempio2 = $row['esempio2'];
			$esempio3 = $row['esempio3'];
                        ....
			....	
?>
            
 	<div class="row-fluid">
        
    	<div class="span3 text-center">
            <?php echo $esempio1; ?>
        </div>
        <div class="span9 des-ads">
            	<?php echo $esempio2; ?>
        <h6><?php echo $esempio3; ?></h6>

        </div>
    </div>
            
			
	<?php 		 
 }}else{
  echo "Nessun record trovato!";
}
?>
<div class="row-fluid">
	<div class="span12 pagination pagination-centered">
    	<?php 
if ($all_pages > 1){
	echo "<ul>";
  if ($pag > 1){
    echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag -1) . "\">";
    echo " &larr; </a></li>";
  }
  $maximum_links =6;
  	$init = $pag <= $maximum_links / 1 ? 1 : ceil($pag - $maximum_links / 1);
    $end = $pag > $maximum_links / 2 ? $pag + $maximum_links / 2 : $maximum_links;
     $sup="8"; // dichiaro variabile per controllo superamento tot pagine
	 // ed eseguo un controlla che nel caso si verifichi mi mastra il link alla pagina numero 1
  if ($pag >= $sup) {echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=1\">";
		echo"1</a></li>
		<li class='disabled'><a href=\"#\">...</a></li>";}
	// faccio un ciclo di tutte le pagine
    for ($p = $init; $p <= $end; $p++) {
		
    // per la pagina corrente non mostro nessun link ma la evidenzio in blod
    // all'interno della sequenza delle pagine
    if ($p == $pag) echo "<li class='active'><a href'#'><b>" . $p . "</b></a></li>";
    // per tutte le altre pagine stampo il link
    else { 
      echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . $p . "\">";
      echo $p . "</a></li>";
    } 
  }
  if ($p > $pag){
    echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag +1) . "\">";
    echo " &rarr; </a></li>";
  }
  echo "</ul>"; 
}; ?>
    </div>
</div>

Il risultato ottenuto è il seguente:
<- 1 ... 5 6 7 8 9 10 11 ->

:fonzie:
 
Ultima modifica:
Ho testato meglio lo script purtroppo ho riscontrato il seguente problema e cioè la paginazione continua all'infinito creandomi numeri di pagina anche se non ci sono, lo script è quello del post precedente.... aiutooooo!
 
criric ha scritto:
bisogna vedere come si comporta con quelle finali.
più tardi gli do un occhiata, cmq bisogna intervenire sul fine ciclo che non può essere superiore al numero totale di pagine
 
a dir la verita non sono riuscito a testarlo ma dovresti aggiungere un controllo simile prima di effettuare il ciclo
PHP:
             if ($end >= $all_pages - $maximum_links) {
                $end = $all_pages;
                $init = $all_pages - $maximum_links;
            }
 

Discussioni simili