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
}
Figura 1: Consulta da primeira e última página.
Para que você possa entender melhor, caso tenha restado alguma dúvida, assista a aula exibida abaixo.
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!