Page display limit in paging structure

Asked

Viewed 180 times

-1

  • I am setting up a simple pagination structure and until then it is working.

  • This structure has links called: Previous - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - Next

My question is how to create a display limit, example: I am on page 1, will have to display the links from 1 to 5 and if I click on link 5 appears from 2 to 6 if I click on 6 appear 3 to 7 and so on.

<?php

// Estrutura básica de paginação

$limit = 10; // Limite de registros por página
$cont  = 1;  // Contator
$qtdRegistros = 80; // Quantidade de registros no banco
$qtdPaginas = ceil(($qtdRegistros/100)*$limit); // Quantidades de páginas a ser exibida 


// Verifica se está vázio, se estiver irá colocar o valor 1 
if(empty($_GET['page'])){
    $_GET['page']=$cont;
}


$backPage = $_GET['page']-1;
$advancePage = $_GET['page']+1;


// Verifica se está na primeiro página. Se estiver o botão anterior não é exibido
if($_GET['page'] !=1){
    echo "<a href='?page=$backPage'>Anterior - </a>";
}   

while ($cont <= $qtdPaginas) {
    echo "<a href='?page=$cont'>$cont</a>"; 
    $cont++;    
}


// Verifica se está na última página. Se estiver o botão próximo não é exibido
if($_GET['page'] != $qtdPaginas){
    echo "<a href='?page=$advancePage'> - Próximo </a>";
}


    echo "</br>";


if(isset($_GET['page'])== $cont){
    if($_GET['page'] <= $qtdPaginas){
        $url=$_GET['page'];
        echo "Página atual é:".$url."</br>";
    }else{
        echo "Página não encontrada";
    }
}

// Explicação.. 

// ceil() -- Arredonda para cima - 
// $qtdPaginas -- Pega a quantidade de registros(50) divide por 100 = 0,5 multiplica pelo limite (10) = 5, ou seja 5 páginas.

?>
  • 1

    The basic logic is to place the current page in the center of the range you want to show. If you are on page 10 and want to show 5 at a time, you show from 8 to 12 (that is, two before and two after). The account is simple. The tips (first and last pages) are exceptions.

  • Dude, I did it once with pure PHP and it was crazy. Then I saw it was a waste of time and I could use Datatables.

  • As I’m learning, I’m trying to do it under the nail, but I’m having a hard time putting together this logic.

2 answers

5

logica : (page = current page, pages = total pages)

if pagina != 1 mostra link pag1 (primeira)...
for (i = pagina -4; i <= pagina +4; i++) {
  if (i > 1 and i < pagina - 4 and i < paginas and i < pagina + 4) mostra link pagina=i
}
if pagina != paginas link ...paginas (ultima)

for example current page 14, total page 50. I abstracted language intentionally

will appear : 1... 10 11 12 13 14 15 18 17 18 ...50

0

Thanks Guys, I was able to assemble the code by placing one for inside the other. It worked well.

<?php

// Estrutura básica de páginação 

$limit = 10; // Limite de registros por página
$cont  = 1;  // Contator
$qtdRegistros = 200; // Quantidade de registros no banco
$qtdPaginas = ceil(($qtdRegistros/100)*$limit); // Quantidades de páginas a ser exibida 


// Verifica se está vázio, se estiver irá colocar o valor 1 
if(empty($_GET['page'])){
    $_GET['page']=$cont;
}

$backPage = $_GET['page']-1;
$advancePage = $_GET['page']+1;


// Verifica se está na primeiro página. Se estiver o botão anterior não é exibido
if($_GET['page'] !=1){
    echo "<a href='?page=$backPage'>Anterior - </a>";
}   


for($cont;$cont<=$limit;$cont++){
    if($cont<=5){
        echo "<a href='?page=$cont'>$cont</a>";
    }

    if($_GET['page']>5){
        for($j=$_GET['page']-2;$j<=$_GET['page']+2;$j++){
                echo "<a href='?page=$j'>$j</a>";
                if($j>=$qtdPaginas){
                    break;
                }
            }   
            break;
    }
}       


// Verifica se está na última página. Se estiver o botão próximo não é exibido
if($_GET['page'] != $qtdPaginas){
    echo "<a href='?page=$advancePage'> - Próximo </a>";
}


echo "</br>";


if(isset($_GET['page'])== $cont){
    if($_GET['page'] <= $qtdPaginas){
        $url=$_GET['page'];
        echo "Página atual é:".$url."</br>";
    }else{
        echo "Página não encontrada";
    }
}

// Explicação.. 

// ceil() -- Arredonda para cima - 
// $qtdPaginas -- Pega a quantidade de registros(50) divide por 100 = 0,5 multiplica pelo limite (10) = 5, ou seja 5 páginas.


?>

Browser other questions tagged

You are not signed in. Login or sign up in order to post.