Limitando o número de links em uma paginação
Olá, pessoal!
Sistemas de paginação são muito usados. Já existem muitos exemplos por aí, tanto em formato de artigos/tutoriais, quanto scripts prontos. Por isso, hoje não vou me ater nas técnicas de realização desse processo. Pretendo mostrar como criar os links para cada página, semelhantemente à maneira usada pelo Google, em que aparecem somente alguns links, para evitar que se mostre uma linha muito extensa.
Estou considerando que o leitor já sabe como fazer paginação. Se não sabe, é bom ler artigos sobre isso antes de continuar com este tutorial. :P
Usarei variáveis com valores estátiocs, somente para mostrar a lógica da coisa. Claro que você usará os valores gerados pelo seu sistema de paginação.
Chega de enrolação e vamos ao que interessa!
A variável "total" contém o número total de páginas (não de registros) retornadas pela paginação.
// total de páginas
$total = 50;
A variável "max_links" armazena o número máximo de links que serão mostrados.
// número máximo de links da paginação
$max_links = 10;
A variaável "pagina" contém o valor da página corrente. Esse é o valor que virá da URL.
// página corrente
$pagina = 10;
"links_laterais" contém o número de links que serão mostrados, no máximo, antes e depois da página corrente. Esse valor corresponde à metade do valor de "max_links". Usei ceil() para ter certeza de que será gerado um número inteiro. Se você sempre se lembrar de colocar um número par em "max_links", pode retirar a função ceil(), reduzindo o trabalho do processador e o tempo de execução do script.
// calcula quantos links haverá à esquerda e à direita da página corrente
// usa-se ceil() para assegurar que o número será inteiro
$links_laterais = ceil($max_links / 2);
Aqui eu crio as variáveis que serão usadas no loop para gerar os links da paginação. É preferível criar essa variáveis em vez de declará-las denrto do loop. Caso contrário $limite seria calculado a cada iteração do laço ($inicio até poderia ser declarada dentro do for, pois só é calculada uma vez).
// variáveis para o loop
$inicio = $pagina - $links_laterais;
$limite = $pagina + $links_laterais;Agora vem a parte que faz tudo aparecer. Não tem muito o que explicar. Os IF's se explicam por si só.
Quando $i possui o valor da página corrente, o link não é gerado (até porque ninguém pretende ir para a página em que está. :P ). É necessário verificar se $i é maior que um e menor que o total de páginas, para que não sejam criados link inexistentes. Usei a página pagincao.php somente para exemplificar; mude-a para o nome do seu script.
for ($i = $inicio; $i <= $limite; $i++)
{
if ($i == $pagina)
{
echo " <strong>" . $i . "</strong> ";
}
else
{
if ($i >= 1 && $i <= $total)
{
echo " <a href=\"paginacao.php?pagina=" . $i . "\">" . $i . "</a> ";
}
}
}
O script completo:
<?php
// total de páginas
$total = 50;
// número máximo de links da paginação
$max_links = 10;
// página corrente
$pagina = 3;
// calcula quantos links haverá à esquerda e à direita da página corrente
// usa-se ceil() para assegurar que o número será inteiro
$links_laterais = ceil($max_links / 2);
// variáveis para o loop
$inicio = $pagina - $links_laterais;
$limite = $pagina + $links_laterais;
for ($i = $inicio; $i <= $limite; $i++){
if ($i == $pagina)
{
echo " <strong>" . $i . "</strong> ";
}
else
{
if ($i >= 1 && $i <= $total)
{
echo " <a href=\"paginacao.php?pagina=" . $i . "\">" . $i . "</a> ";
}
}
}
?>
Espero que tenha ficado tudo bem claro. É algo simples, mas que, freqüentemente aparece como dúvida no fórum.
[]s
Beraldo
Discussão (4)
Carregando comentários...