Criando um menu de paginação de resultados com algumas funcionalidades
Publicado por charles schaefer 27/10/2006
[ Hits: 6.776 ]
Essa é uma classe que vai criar uma paginação de resultados para os valores que você passar.
Você pode customizar como o resultado será apresentado, indicando dentro de qual tag ele deve ser incluído, qual caractere separará cada número na paginação; se o menu será infinito (1 2 3 4 5 6 7...) ou com números limitados (|< <<1 2 3 4 5 >> >|), etc.
Você ainda pode ter uma paginação inteligente, que diz em qual registro de um total você está (reg.: 10 a 15 de 50), sendo essa mensagem customizável também.
<?php /** SPagin é uma classe php simples, que gera um menu de paginação formatado, com a saída customizável. Copyright (C) 2006 Charles Schaefer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /** * Classe que gera a paginação com limite de exibição de resutlados. Essa classe pode ser usada com dados arbitrários ou vindos do banco de dados * @copyright Charles Schaefer - 2006 * */ class SPagin{ var $regs,$exNum,$url,$totReg,$totPag,$pg; var $separador,$tag_pagin,$url_separator; /** * @desc Método construtor da classe * * @param string $regs numero de registro por página * @param string $url endereço da página onde contêm a paginação * @param integer $totReg total de registros contidos no Banco de Dados * @param integer $pg em qual páina estamos * @param integer $exNum nmero de páginas a ser exibida na paginação ex.: exNum =5 (<< < 1 2 3 4 5 > >>) * @param string $separador padrão de separação dos links * @param string $tag_pagin tag na qual será inserida a paginação * @return none */ function SPagin($regs,$url,$totReg,$pg,$exNum=\"\",$separador=\' | \',$tag_pagin=\"\"){ $this->regs = $regs; $this->exNum = $exNum;//essa variável deve ser usada para criar uma forma de exibir apenas a quantidade de numeros pedida $this->url = $url; $this->totReg = $totReg; $totPag = $totReg<=$regs ? 1 : ceil($totReg/$regs); $this->totPag = $totPag; $this->pg = ($pg != \"\") ? $pg : 1; $this->separador = $separador != \"\" ? $separador : \" | \"; $this->tag_pagin = $tag_pagin; $this->url_separator = (strpos($url,\"?\") !== false) ? \"&\" : \"?\"; } /** * @desc mêtodo que irá definir os argumentos para serem repassados no \"limit\", quando se estiver utilizando um banco de dados * @return string limit formatado para usar como cláusula no sql */ function limit(){ $inicio = ($this->pg * $this->regs) - $this->regs;//o primeiro registro a ser puxado do BD $final = $this->regs;//o último a ser puxado do BD $limit = $inicio.\",\".$final; return $limit; } /** * @desc página que vai devolver o resultado da paginação * * @param string $primeiro o que usar na paginação com inicador de primeiro * @param string $ultimo o que usar na paginação com inicador de ultimo * @param string $prev o que usar na paginação com inicador de próximo * @param string $next o que usar na paginação com inicador de anterior * @return string menu formatado, pronto para ser exibido na tela */ function paginar($primeiro=\"<<\",$ultimo=\">>\",$prev=\"<\",$next=\">\"){ $pg = $this->pg; $totPag = $this->totPag; $url = $this->url; $tag_pagin = $this->tag_pagin; $url_separator = $this->url_separator; $primeiro = $primeiro == \"\" ? \"<<\" : $primeiro; $ultimo = $ultimo == \"\" ? \">>\" : $ultimo; $prev = $prev == \"\" ? \"<\" : $prev; $next = $next == \"\" ? \">\" : $next; if($totPag == $pg) { $pg = $this->pg - 1; $proximo = $next.\" \"; $ultima = $ultimo; $anterior = \"<a href=\\\"\".$url.$url_separator.\"pg=$pg\\\"> \".$prev.\"</a> \"; $primeira = \"<a href=\\\"\".$url.$url_separator.\"pg=1\\\">\".$primeiro.\"</a>\"; }elseif($pg == 1) { $pg = $this->pg + 1; $proximo = \"<a href=\\\"\".$url.$url_separator.\"pg=$pg\\\">\".$next.\" </a>\"; $anterior = \" \".$prev.\" \"; $primeira = $primeiro; $ultima = \"<a href=\\\"\".$url.$url_separator.\"pg=$totPag\\\">\".$ultimo.\"</a>\"; }else { $pg_p = $pg + 1; $pg_a = $pg - 1; $proximo = \"<a href=\\\"\".$url.$url_separator.\"pg=$pg_p\\\">\".$next.\" </a>\"; $anterior = \"<a href=\\\"\".$url.$url_separator.\"pg=$pg_a\\\"> \".$prev.\"</a> \"; $primeira = \"<a href=\\\"\".$url.$url_separator.\"pg=1\\\">\".$primeiro.\"<a/>\"; $ultima = \"<a href=\\\"\".$url.$url_separator.\"pg=$totPag\\\">\".$ultimo.\"</a>\"; } $pagina = \"<p>\".$primeira.$anterior; if($this->exNum != \"\") { $exNum = $this->exNum; $pagina .= $this->paginar_limitado($exNum,$totPag); }else { for($i=1;$i<=$totPag;$i++) { if($i == $this->pg) { $pagina .= \"<b>\".$i.\"</b> | \"; } else { $pagina .= \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a> | \"; } }//close for } $pagina .= $proximo.$ultima.\"</p>\"; if($totPag == 1) { $result = \"<span style=\\\"visibility: hidden\\\">\".$pagina.\"</span>\"; }elseif ($tag_pagin != \"\") { $result = str_replace(\"><\",\">\".$pagina.\"<\",$tag_pagin); }else { $result = $pagina; } return $result; }//close function /** * @desc Função que irá criar um menu de navegação de páginas com limite de itens (no menu) ex.: << < 1 2 3 4 5 > >> * * @param integer $exNum * @param integer $totalPg * @return string menu formatado */ function paginar_limitado($exNum,$totalPg) { $url = $this->url; $url_separator = $this->url_separator; $separador = $this->separador; $pg = $this->pg; $div = (is_int($exNum/2)) ? $exNum/2 : floor($exNum/2); $centro = (is_int($exNum/2)) ? $exNum/2 : ceil($exNum/2); if($pg == $totalPg) { if($totalPg >= $exNum) { $termina = $totalPg; $comeco = $termina - $exNum +1; $i =$comeco; while($i>=$comeco and $i<=$termina) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } }else { $comeco = 1; $termina = $totalPg; $i = $comeco; while($i>=$comeco and $i<=$termina) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } } }elseif ($pg == 1) { $comeco = 1; $termina = $totalPg >= $exNum ? ($comeco + $exNum) -1 : $totalPg; $i = $comeco; //echo $i.\" \".$termina.\" \".$exNum.\" \".$this->exNum; while($i <= $termina and $i >= $comeco) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } }elseif ($pg < $totalPg - $exNum) { if($pg > $exNum) { $comeco = $pg - $div; $termina = $comeco + $exNum - 1; $i = $comeco; while ($i <= $termina and $i >= $comeco) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } }elseif ($pg < $exNum) { if($pg > $centro) { $comeco = $pg - $div; $termina = $comeco + $exNum - 1; $i = $comeco; while($i <= $termina and $i >= $comeco) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } }else { $comeco = 1; $termina = $comeco + $exNum - 1; $i = $comeco; while($i <= $termina and $i >= $comeco) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } } }elseif ($pg == $exNum) { $comeco = $exNum - $div; $termina = $comeco + $exNum -1; $i = $comeco; while ($i >= $comeco and $i <= $termina) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } } }elseif ($pg > $totalPg - $exNum){ if($totalPg > $exNum) { //$comeco = $totalPg - $exNum; //$termina = $comeco + $exNum - 1; if($pg <= $totalPg - ($exNum - $centro)) { $comeco = $pg - $div; $termina = $comeco + $exNum - 1; $i = $comeco; while ($i >= $comeco and $i <= $termina) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } }else { $comeco = $totalPg - $exNum + 1; $termina = $comeco + $exNum - 1; $i = $comeco; while ($i >= $comeco and $i <= $termina) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } } }elseif ($totalPg <= $exNum) { $comeco = 1; $termina = $totalPg; $i = $comeco; while ($i <= $termina and $i >= $comeco) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } } }elseif ($pg == $totalPg - $exNum) { $div = floor($exNum / 2); $termina = $totalPg - ($exNum - $div); $comeco = $termina - $exNum + 1; $i = $comeco; while ($i <= $termina and $i >= $comeco) { $menu .= ($i == $pg) ? \"<b>\".$i.\"</b>$separador\" : \"<a href=\\\"\".$url.$url_separator.\"pg=\".$i.\"\\\">\".$i.\"</a>$separador\"; $i++; } } //die($menu); $menu = rtrim($menu,$separador).\" \"; return $menu; }//close function /** * @desc função que gera a paginação inteligente, no formato item y a x de n * * @param string $template deve estar no formato \"blabla #1 blabla #2 blabla #3 blabalbalbal\" sendo que #1,#2,#3 são inicio, final, total, respectivamente. Ex.: item #1 a #2 de #3 ficara \"item 10 a 20 de 45\" * @return string menu formatado */ function paginar_inteligente($template=\"\") { $menu = \"\"; $de = $this->pg * $this->exNum - $this->exNum + 1; $a = $this->pg * $this->exNum; $total = $this->totReg; if(!empty($template)) { $tpl = substr_replace(substr_replace(substr_replace($template,$total,strpos($template,\"#3\"),2),$a,strpos($template,\"#2\"),2),$de,strpos($template,\"#1\"),2); $menu = $tpl; }else { $menu = \"Itens \".$de.\" a \".$a.\" de \".$total; } return $menu; } } ?> <?php //exemplo de uso da classe $pagin = new SPagin(5,$_SERVER['PHP_SELF'],200,$_GET['pagina_atual'],5); //a ser usada na query como parâmetro limit $limit = $pagin->limit(); echo $pagin->paginacao(); /* Saída do exemplo: << < 1 | <a href="teste.php?pg=2">2</a> | <a href="teste.php?pg=3">3</a> | <a href="teste.php?pg=4">4</a> <a href="teste.php?pg=5">5</a> <a href="teste.php?pg=2">></a> <a href="teste.php?pg=40">>></a> */ ?>
WShell - Comandos do sistema via web
Converte para maiúsculas a primeira letra de cada palavra, resolvendo o problema de acentos
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (2)
Linux Lite Demorando Muito Para Ligar (0)
PC não liga no filtro de linha (3)