Beraldo 864 Denunciar post Postado Agosto 23, 2008 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
Alaerte Gabriel 662 Denunciar post Postado Agosto 25, 2008 Ó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
Beraldo 864 Denunciar post Postado Agosto 25, 2008 Obrigado, Alaerte. A intençao era, de fato, fazer algo simples, mas bem explicativo. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif []s Beraldo Compartilhar este post Link para o post Compartilhar em outros sites
tony_lu 1 Denunciar post Postado Agosto 25, 2008 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
Beraldo 864 Denunciar post Postado Agosto 25, 2008 Obrigado, tony_lu. Para fazer os links "anterior" e "próximo" basta criar links com o valor de pagina (variável da URL) igual a $pagina - 1 e $pagina + 1, respectivamente. []s Beraldo Compartilhar este post Link para o post Compartilhar em outros sites