Problema su numerazione paginazione php

Discussione in 'PHP' iniziata da migo80, 13 Dicembre 2014.

  1. migo80

    migo80 Utente Attivo

    Registrato:
    25 Aprile 2013
    Messaggi:
    208
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    Occupazione:
    web design
    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: 13 Dicembre 2014
  2. IImanuII

    IImanuII Utente Attivo

    Registrato:
    10 Giugno 2012
    Messaggi:
    390
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    Mi iscrivo, sono interessato anche io

    Inviato dal mio Nexus 5 con Tapatalk
     
  3. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    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 ceil($pag $maximum_links 2);
                
    // fine ciclo
                
    $end $pag $maximum_links $pag $maximum_links $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: 14 Dicembre 2014
  4. migo80

    migo80 Utente Attivo

    Registrato:
    25 Aprile 2013
    Messaggi:
    208
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    Occupazione:
    web design
    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 ceil($pag $maximum_links 1);
        
    $end $pag $maximum_links $pag $maximum_links $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: 14 Dicembre 2014
  5. migo80

    migo80 Utente Attivo

    Registrato:
    25 Aprile 2013
    Messaggi:
    208
    Mi Piace Ricevuti:
    3
    Punteggio:
    18
    Occupazione:
    web design
    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!
     
  6. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    più tardi gli do un occhiata, cmq bisogna intervenire sul fine ciclo che non può essere superiore al numero totale di pagine
     
  7. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    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;
                }
     
Sto caricando...

Condividi questa Pagina