[PHP] Ciclo for dinamico

Discussione in 'PHP' iniziata da colomber, 12 Agosto 2017.

  1. colomber

    colomber Utente Attivo

    Registrato:
    4 Dicembre 2012
    Messaggi:
    215
    Mi Piace Ricevuti:
    1
    Punteggio:
    16
    Questo ciclo stampa 5 pagine su 50 e la prima e l'ultima che rimarranno sempre presenti, devo fare in modo che quando sono alla pagina 5 appaiono la pagina 6 e 7 e spariscano la pagina 2 e 3 e cosi via andando avanti o indietro sapete come fare?


    PHP:
    <?php

    $paginetotali 
    50;
    $pagineviste 5;
    $inizio 1;

    echo 
    '<a href="">' .$inizio '</a> ';

    for (
    $i 2$i <= $pagineviste$i++) {

    echo 
    '<a href="">' .$i '</a> ';
    }

    echo 
    '<a href="">' .$paginetotali '</a> ';
       
    ?>
     
  2. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    60
    Mi Piace Ricevuti:
    6
    Punteggio:
    8
  3. colomber

    colomber Utente Attivo

    Registrato:
    4 Dicembre 2012
    Messaggi:
    215
    Mi Piace Ricevuti:
    1
    Punteggio:
    16
    queste cose della guida le ho già fatte tutte il mio problema è un'altro, quando hai tante pagine non puoi visualizzare tutti i link a queste pagine.
     
  4. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    60
    Mi Piace Ricevuti:
    6
    Punteggio:
    8
    non avevo visto bene ciò che ti servive.. prova questo

    PHP:
    <?php
    $paginetotali 
    '50';
    $numerazione '2';
    $target="127.0.0.1/";
    $paginaattuale='15';
    $page $paginaattuale;

        
    $lpm1 $paginetotali 1;

        
    $pagination "";

        if(
    $paginetotali 1)
        {
            if (
    $paginetotali + ($numerazione 2))
            {
                for (
    $counter 1$counter <= $paginetotali$counter++)
                {
                    if (
    $counter == $page)
                    
    $pagination.= $counter;
                    else
                    
    $pagination.= "<a href='".$target."page=$counter'>$counter</a>";                
                }
            }
            elseif(
    $paginetotali + ($numerazione 2))
            {
                if(
    $page + ($numerazione 2))    
                {
                    for (
    $counter 1$counter + ($numerazione 2); $counter++)
                    {
                        if (
    $counter == $page)
                            
    $pagination.= "$counter";
                        else
                            
    $pagination.= "<a href='".$target."page=$counter'>$counter</a>";                
                    }
                    
    $pagination.= "...";
                    
    $pagination.= "<a href='".$target."page=$lpm1'>$lpm1</a>";
                    
    $pagination.= "<a href='".$target."page=$paginetotali'>$paginetotali</a>";    
                }
                elseif(
    $paginetotali - ($numerazione 2) > $page && $page > ($numerazione 2))
                {
                    
    $pagination.= "<a href='".$target."page=1'>1</a>";
                    
    $pagination.= "<a href='".$target."page=2'>2</a>";
                    
    $pagination.= "...";
                   
                    for (
    $counter $page $numerazione$counter <= $page $numerazione$counter++)
                    {
                        if (
    $counter == $page)
                            
    $pagination.= "$counter";
                        else
                            
    $pagination.= "<a href='".$target."page=$counter'>$counter</a>";                
                    }
                   
                    
    $pagination.= "..";
                    
    $pagination.= "<a href='".$target."page=$lpm1'>$lpm1</a>";
                    
    $pagination.= "<a href='".$target."page=$paginetotali'>$paginetotali</a>";    
                }
                else
                {
                    
    $pagination.= "<a href='".$target."page=1'>1</a>";
                    
    $pagination.= "<a href='".$target."page=2'>2</a>";
                    
    $pagination.= "..";
                   
                    for (
    $counter $paginetotali - (+ ($numerazione 2)); $counter <= $paginetotali$counter++)
                    {
                        if (
    $counter == $page)
                            
    $pagination.= "$counter";
                        else
                            
    $pagination.= "<a href='".$target."page=$counter'>$counter</a>";                
                    }
                }
        }
        }  
        echo 
    $pagination;
    ?>
    hai pagina per le prime e ultime 2 pagine, pagina attuale + le 2 immediatamente successive e precedenti e '...' nel mezzo
     
  5. colomber

    colomber Utente Attivo

    Registrato:
    4 Dicembre 2012
    Messaggi:
    215
    Mi Piace Ricevuti:
    1
    Punteggio:
    16
    avevo trovato questa soluzione ma non mi piace quando arriva all'ultima pagina fa vedere solo la prima e l'ultima e non si può tornare indietro al precedente

    PHP:
    <?php

     $link 
    "";
     
    $paginacorrente 1;
     
    $paginetotali 20;
     
    $limite 4;

     if (
    $paginetotali >=&& $paginacorrente <= $paginetotali) {
            
    $conta 1;
            
    $link "";
            if (
    $paginacorrente >= ($limite/2)) {
                 
    $link .= "<a href=\"?pagina=1\">1 </a> ... "; }
            for (
    $x=$paginacorrente$x<=$paginetotali;$x++)
            {

                if(
    $conta $limite)
                    
    $link .= "<a href=\"?pagina=" .$x."\">".$x." </a>";

                
    $conta++;
            }
            if (
    $paginacorrente $paginetotali - ($limite/2))
             { 
    $link .= "... " "<a href=\"?pagina=" .$paginetotali."\">".$paginetotali." </a>"; }
     
      }
     
      echo 
    $link;
       
    ?>
     
    Ultima modifica: 12 Agosto 2017
  6. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    60
    Mi Piace Ricevuti:
    6
    Punteggio:
    8
    Per pagina precedente e successiva ti basta usare
    Codice:
    $prev=($paginacorrente -1);
    $next=($paginacorrente +1) 
    Escludendo opportunamente pag iniziale e pag finale
     
  7. colomber

    colomber Utente Attivo

    Registrato:
    4 Dicembre 2012
    Messaggi:
    215
    Mi Piace Ricevuti:
    1
    Punteggio:
    16
    Questo è molto meglio unica cosa che non riesco a venirne a capo quando la pagina corrente coincide con l'ultima pagina non riesco a farla apparire senza url (in grossetto per intenderci) come nelle altre pagine


    PHP:
    <?php

        $totalepagine 
    20;
        
    $paginacorrente 19;

        
    $link "";
     
        if (
    $totalepagine >= && $paginacorrente <= $totalepagine) {
       
            if (
    $paginacorrente != 1) {
                
    $link .= '<a href="">1</a> '; }
            else { 
    $link .= '1 ';}
               
            
    $i max(2$paginacorrente 3);
            if (
    $i 2)
                
    $link .= " ... ";
               
            for (; 
    $i min($paginacorrente 4$totalepagine); $i++) {  
                if (
    $i != $paginacorrente) {
                
    $link .= '<a href="">'.$i.'</a> ';}
                else { 
    $link .= $i ' ';}            
            }
           
            if (
    $i != $totalepagine)
                
    $link .= " ... ";
                
    $link .= '<a href="">'$totalepagine.'</a> ';                      
        }
       
        echo 
    $link;  
       
    ?>
     
  8. colomber

    colomber Utente Attivo

    Registrato:
    4 Dicembre 2012
    Messaggi:
    215
    Mi Piace Ricevuti:
    1
    Punteggio:
    16
  9. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    60
    Mi Piace Ricevuti:
    6
    Punteggio:
    8
    abbi un po di pazienza.. siamo al 14 agosto, fa caldo e chi può sta in ferie..
    ma almeno ci hai provato a fare quello che ti serve?
    nel codice che ti avevo postato
    PHP:
    $lpm1 $paginetotali 1;
    indica proprio l'ultima pagina.. ti bastava leggerlo per provare a cercare la soluzione...

    PHP:
           if ($i != $totalepagine)
                
    $link .= " ... ";
                
    $link .= '<a href="">'. ($totalepagine -1).'</a> '
    if (
    $paginacorrente != $totalepagine) {
                
    $link .= '<a href="">20</a> '; }
            else { 
    $link .= '20 ';}                   
        }
    ti basta individuare l'ultima pagina, come avviene per la pagina 1 ed operare allo stesso modo
     
  10. colomber

    colomber Utente Attivo

    Registrato:
    4 Dicembre 2012
    Messaggi:
    215
    Mi Piace Ricevuti:
    1
    Punteggio:
    16
    da 16 in avanti da doppioni è un da stamattina che provo ma non trovo soluzione
     
    Ultima modifica: 14 Agosto 2017 alle 18:12
  11. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    60
    Mi Piace Ricevuti:
    6
    Punteggio:
    8
    PHP:
    <?php

        $totalepagine 
    20;
        
    $paginacorrente 16;

        
    $link "";
     
        if (
    $totalepagine >= && $paginacorrente <= $totalepagine) {
      
            if (
    $paginacorrente != 1) {
                
    $link .= '<a href="">1</a> '; }
            else { 
    $link .= '1 ';}
              
            
    $i max(2$paginacorrente 3);
            if (
    $i 2)
                
    $link .= " ... ";
              
            for (; 
    $i min($paginacorrente 4, ($totalepagine -1)); $i++) { 
                if (
    $i != $paginacorrente) {
                
    $link .= '<a href="">'.$i.'</a> ';}
                else { 
    $link .= $i ' ';}           
            }
          
            if (
    $i != $totalepagine)
                
    $link .= " ... ";
          
    $link .= '<a href="">'. ($totalepagine -1).'</a> ';
    if (
    $paginacorrente != $totalepagine) {
                
    $link .= '<a href="">20</a> '; }
            else { 
    $link .= '20 ';} 
        }
        echo 
    $link
      
    ?>
     
  12. colomber

    colomber Utente Attivo

    Registrato:
    4 Dicembre 2012
    Messaggi:
    215
    Mi Piace Ricevuti:
    1
    Punteggio:
    16
    eliminati i doppioni ma quando paginacorrente si trova a 19 è come quando c'era il problame con 20
     
  13. colomber

    colomber Utente Attivo

    Registrato:
    4 Dicembre 2012
    Messaggi:
    215
    Mi Piace Ricevuti:
    1
    Punteggio:
    16
  14. Antonio De Marco

    Antonio De Marco Nuovo Utente

    Registrato:
    28 Luglio 2015
    Messaggi:
    9
    Mi Piace Ricevuti:
    1
    Punteggio:
    3
    Home Page:
    Così dovrebbe funzionare anche nell'ultimo caso
    Codice:
    <?php
    
        $totalepagine = 20;
        $paginacorrente = 20;
    
        $link = "";
     
        if ($totalepagine >= 1 && $paginacorrente <= $totalepagine) {
    
            if ($paginacorrente != 1) {
                $link .= '<a href="">1</a> '; }
            else { $link .= '1 ';}
              
            $i = max(2, $paginacorrente - 3);
            if ($i > 2)
                $link .= " ... ";
              
            for (; $i < min($paginacorrente + 4, $totalepagine); $i++) { 
                if ($i != $paginacorrente) {
                $link .= '<a href="">'.$i.'</a> ';}
                else { $link .=$i . ' ';}           
            }
          
            if ($i != $totalepagine){
                $link .= " ... ";
            }
    
    
        if ($paginacorrente != $totalepagine) {
                $link .= '<a href="">'.$totalepagine.'</a> '; }
            else { $link .= $totalepagine;}
        
        }
      
        echo $link; 
      
    ?>
     
    A colomber piace questo elemento.
  15. colomber

    colomber Utente Attivo

    Registrato:
    4 Dicembre 2012
    Messaggi:
    215
    Mi Piace Ricevuti:
    1
    Punteggio:
    16
    funziona perfettamente grazie mille!
     
    A Antonio De Marco piace questo elemento.
Sto caricando...

Condividi questa Pagina