[PHP] Ciclo for dinamico

colomber

Utente Attivo
4 Dic 2012
232
1
18
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> ';
   
?>
 
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.
 
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 < 1 + ($numerazione * 2))
        {
            for ($counter = 1; $counter <= $paginetotali; $counter++)
            {
                if ($counter == $page)
                $pagination.= $counter;
                else
                $pagination.= "<a href='".$target."page=$counter'>$counter</a>";                
            }
        }
        elseif($paginetotali > 1 + ($numerazione * 2))
        {
            if($page < 1 + ($numerazione * 2))    
            {
                for ($counter = 1; $counter < 1 + ($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 - (1 + ($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
 
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 >=1 && $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:
Per pagina precedente e successiva ti basta usare
Codice:
$prev=($paginacorrente -1);
$next=($paginacorrente +1)
Escludendo opportunamente pag iniziale e pag finale
 
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 >= 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 .= " ... ";
            $link .= '<a href="">'. $totalepagine.'</a> ';                      
    }
   
    echo $link;  
   
?>
 
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
 
da 16 in avanti da doppioni è un da stamattina che provo ma non trovo soluzione
 
Ultima modifica:
PHP:
<?php

    $totalepagine = 20;
    $paginacorrente = 16;

    $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 -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; 
  
?>
 
eliminati i doppioni ma quando paginacorrente si trova a 19 è come quando c'era il problame con 20
 
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; 
  
?>
 
  • Like
Reactions: colomber

Discussioni simili