Criando um menu de paginação de resultados com algumas funcionalidades
Publicado por charles schaefer 27/10/2006
[ Hits: 6.694 ]
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> */ ?>
gerador de tabelas em html v2.2
Graficos 3D simples e configuraveis com PHP
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Tentando instalar o Ekattor School no xampp (5)
Definir tempo limite para acesso ssh (4)
Problema instalação do sige software gestão escolar script gratuito (0)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta