Entendendo como funciona uma paginação

Entenda e crie paginação para seu site, diminuindo assim o número de requisições no servidor.

 Escrevendo testes automatizados com PHPUnit

Ter um recurso que limite a quantidade de conteúdos disponíveis por página, é quase que uma obrigação nos dias de hoje, pois não devemos carregar uma gama absurda de conteúdo em uma única página, sendo que nosso usuário não vai consumir todo conteúdo.

Um mecanismo de paginação possui vários benefícios, tanto para o desenvolvedor quanto para o cliente, podemos ver alguns abaixo.

- Carregamento mais rápido da página;

- Consulta otimizada no SQL;

- Baixo consumo de banda de internet (caso o acesso for via dispositivo móvel);

- Layout mais limpo e organizado;

- Entre outros.

Neste artigo será implementando o mecanismo de paginação em PHP, mas a lógica é exatamente a mesma para outras linguagens, como o ASP.NET e Java, por exemplo. Basicamente precisamos fazer alguns cálculos de onde se inicia e termina de acordo com a página atual do cliente. Para se obter a quantidade de páginas, arredondamos para cima a divisão da quantidade de registros contidos, pela quantidade de itens a ser exibido por página, assim podemos saber quantos botões vamos ter que implementar na página. O fim é a multiplicação da página atual pela quantidade de registros por páginas, e o início é a quantidade final subtraída pela quantidade por páginas.

O algoritmo abaixo foi escrito em PHP e está totalmente comentado, leia atentamente cada instrução da linha para que possa entender.

Código 01:

//O vetor a baixo exemplifica as informações contidas no banco de dados.
$vetProdutos = array("Mouse", "Teclado", "Monitor", "CPU", "Caixa de som", "Fone de ouvido", "Mouse pad", "Cabo USB", "Pen Drive", "HD externo", "Estabilizador", 
 
"Filtro de linha", "Roteador", "Cabo de rede", "Carregador", "Luminária");
 
$totalPagina = 5; //Variável que armazena a quantidade de produtos por página.
 
//Verifica se exite alguma query string com o valor da página, se não houver, define o valor 1.
$pagina = (filter_input(INPUT_GET, "pagina", FILTER_SANITIZE_NUMBER_INT) ? filter_input(INPUT_GET, "pagina", FILTER_SANITIZE_NUMBER_INT) : 1);
 
/*
    ceil() - Arredonda um valor para cima, por exemplo, 5.5 arredonda para 6, pois assim vai exibir cinco na primeira página e um na próxima.$_COOKIE
    count() - Conta a quantidade de valores do vetor
    15 / 5 = 3 Paginas
    16 / 5 = 3,2 | arredondamos para cima e temos 4 páginas.
*/
$quantidadePaginas = ceil(count($vetProdutos) / $totalPagina);
 
$fim = ($pagina * $totalPagina); //Multiplicamos a página atual pela quantidade de itens por página: P=4 I= 5 | 4 * 5 = 20;
$inicio = ($fim - $totalPagina); //Subtraimos o total de páginas pela quantidade final a ser exibido: FIM = 20 Tot. Pag. = 5 | 20 - 5 = 15
?>
 
            <title>Paginação com PHP</title>
            <meta charset="utf-8">
         
         
            <div id="dvConteudo">
                <h1>Produtos</h1>
                <br>
                    <?php
                    for($j = $inicio; $inicio < $fim; $inicio++){
                            if(!empty($vetProdutos[$inicio])){//Verificamos se as demais posições possuem algum valor
                                 echo "<span style='color: red;'>- {$vetProdutos[$inicio]}<br>";
                            }
                        }
                    ?>
                    <br>
                <?php
                    //Montamos a quantidade de botões
                    for($i = 0; $i < $quantidadePaginas; $i++){
                    ?>
                        <a href="?pagina=<?=($i + 1);?>" style="color: #111; text-decoration: none; background-color: #CCC; padding: 5px; border:1px solid #eee; font-
 
weight: bold;"><?=($i + 1);?></a>
                    <?php
                    }

Espero que tenham entendido e não tenha restado nenhuma dúvida, mas caso houver, deixe a sua dúvida nos comentários.

Até a próxima!

Referências

PHP ceil() - http://php.net/manual/pt_BR/function.ceil.php

PHP count() - http://php.net/manual/pt_BR/function.count.php

C# Math.Ceiling - https://msdn.microsoft.com/pt-br/library/zx4t0t48(v=vs.110).aspx