Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Beraldo

Limitando o número de links em uma paginação

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ótimo tutorial Beraldo, está bem claro e objetivo, creio que todos entendam sem problemas http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

é o que pessoal mais procura :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

parabéns Beraldo...ficou muito bom....

só uma duvida...você conseguiria adicionar a opção de

 

< anterior e proximo >

 

neste sistema de paginação??

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.