Problema su numerazione paginazione php

migo80

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

http://www.mrwebmaster.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:

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Mi iscrivo, sono interessato anche io

Inviato dal mio Nexus 5 con Tapatalk
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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:

migo80

Utente Attivo
25 Apr 2013
210
3
18
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:

migo80

Utente Attivo
25 Apr 2013
210
3
18
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

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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;
            }