setMaximo("20"); //Define numéro de itens por página se não fica o padrão de 10; $paginacao->setEstilo("2"); //Define o estilo de paginação, mude se quizer 1 ou 2; $paginacao->setBtnPrimeiro("[Primeiro]"); //Define texto do botão de padrão já está definido mude se quizer; $paginacao->setBtnUltimo("[Último]"); //Define texto do botão de padrão já está definido mude se quizer; $paginacao->setBtnAnterior("[Anterior]"); //Define texto do botão de padrão já está definido mude se quizer; $paginacao->setBtnProximo("[Próximo]"); //Define texto do botão de padrão já está definido mude se quizer; $paginacao->setBtnPrimeiroOn(true); //Define texto do botão de padrão já está definido mude se quizer; $paginacao->setBtnUltimoOn(true); //Define texto do botão de padrão já está definido mude se quizer; $paginacao->setUrlAdicional("id=1&categoria=3&texto=asdfg"); //Define a url adicional passada por parâmetro via url opcional; $paginacao->setZero(true); //coloca zero aos números baixos de 10; 01 02... padrão ativado (true/false); $paginacao->getNporPg(); //RETORNA NÚMERO DE ITENS POR PÁGINA $paginacao->getNtotalPg(); //RETORNA O NÚMERO TOTAL DE PÁGINAS $paginacao->__start($banco, $sql, $conexao); //Inicia a páginação; $i=0; while($row = mysql_fetch_array($paginacao->getResult())){ echo"linha com item nº $i = ".$row['item']."
"; $i++; } //Para mostrar a paginação coloque em sua página HTML ou PHP:*********************************************** $paginacao->getAnterior("estilo_on","estilo_off"); //Cria botão anterior, os estilos referidos são CSS $paginacao->getPaginas("estilo_paginas"); //Cria nº de pg., os estilos referidos são CSS $paginacao->getProximo("estilo_on","estilo_off"); //Cria botão próximo, os estilos referidos são CSS //Sendo assim junte todos que o resultado seria:************************************************************ $paginacao->getAnterior("paginacao_on","paginacao_off").$paginacao->getPaginas("paginacao_paginas").$paginacao->getProximo("paginacao_on","paginacao_off"); //RESULTADO DEPENDE DO ESTILO****************************************************************************** [ESTILO 1] < Anterior 1 2 3 4 [5] 6 7 8 Próximo > < Anterior 1 2 3 4 5 [6] 7 8 Próximo > o número de páginas total é mostrado sendo no exemplo 8 páginas . . . [ESTILO 2] << Primeiro < Anterior 1 2 3 [4] 5 6 7 Próximo > Último >> se tiver mais que 7 ele começa a tira 1 no começo e adicionar 1 no fim . . . << Primeiro < Anterior 2 3 4 [5] 6 7 8 Próximo > Último >> [FIM DO MODO DE USAR]=======================================================================================/ **/ //=====================\ //[ INICIO DA CLASSE ] | //=====================/ class Paginacao { var $maximo; //variavel de número de itens por página; var $pagina; //controle do número da página; var $mat; //variavel para calculo de páginas; var $inicio; //controle de exibição de itens inicio; var $paginas; //variavel para calculo de páginas; var $linhas; //número total de itens; var $anterior; //controle de página anterior; var $proximo; //controle de proxima página; var $result; //result do sql; var $nPaginas = 0; //número total de páginas; var $btn_primeiro = "<< Primeiro"; //texto do botão com o link para a primeiro página; var $btn_anterior = "< Anterior"; //texto do botão com o link para página anterior; var $btn_proximo = "Próximo >"; //texto do botão com o link para próxima página; var $btn_ultimo = "Último >>"; //texto do botão com o link para a última página; var $sp = "/;\\"; //separa botões de nº pg. OBS: use ;(ponto e virgula para separar os lados); var $btn_primeiro_on = true; //ativa e desativa o botão primeiro (true|false); var $btn_ultimo_on = true; //ativa e desativa o botão último (true|false); var $estilo = 2; //define estilo de paginação; var $urlAdicional; //define url adicional passada por parâmetro pela url; var $zero = true; //coloca zero aos números baixos de 10; 01 02... /* CONSTRUTOR */ function Paginacao(){ } /* SETA O NUMERO DE ITENS POR PÁGINA */ function setMaximo($var){ $this->maximo = $var; } /* SETA SEPARADORES DE BOTÕES DE NÚMERO DE PÁGINAS */ function setSP($var){ $this->sp = $var; } /* SETA O TEXTO DO BOTÃO PRIMEIRO */ function setBtnPrimeiro($var){ $this->btn_primeiro = $var; } /* SETA O TEXTO DO BOTÃO ANTERIOR */ function setBtnAnterior($var){ $this->btn_anterior = $var; } /* SETA O TEXTO DO BOTÃO PROXIMO */ function setBtnProximo($var){ $this->btn_proximo = $var; } /* SETA O TEXTO DO BOTÃO ÚLTIMO */ function setBtnUltimo($var){ $this->btn_ultimo = $var; } /* DEFINE SE O BOTÃO PRIMEIRO VAI SER EXIBIDO */ function setBtnPrimeiroOn($var){ $this->btn_primeiro_on = $var; } /* DEFINE SE O BOTÃO ÚLTIMO VAI SER EXIBIDO */ function setBtnUltimoOn($var){ $this->btn_ultimo_on = $var; } /* DEFINE O ESTILO DE PAGINAÇÃO */ function setEstilo($var){ $this->estilo = $var; } /* DEFINE URL ADICIONAR PARÂMETROS PASSADOS PELA URL */ function setUrlAdicional($var){ $this->urlAdicional = $var; } /* ATIVA O ZERO */ function setZero($var){ $this->zero = $var; } /* INICIALIZAÇÃO DO OBJETO */ function __start($banco, $sql, $conexao){ if($this->maximo == ""){ //se não for setado número de itens por página pega o padrão; $this->maximo = 10; } if($_REQUEST["pagina"] == "") { $this->pagina = "1"; //se página igual a branco seta página = 1; }else{ $this->pagina = $_REQUEST["pagina"]; //pega o número da página passada por parâmetro ex:?pagina=2; } $this->mat = $this->pagina - 1; //inicia com a linha zero do banco; $this->inicio = $this->mat * $this->maximo; //calcula o valor de inicio da lista de acordo com a página; $limita = $sql." LIMIT ".$this->inicio.",".$this->maximo; //gera o sql para pesquisa no banco com a limitação; $this->result = mysql_db_query($banco, $limita, $conexao); //executa sql com a limitação; $result = mysql_db_query($banco, $sql, $conexao); //executa sql sem a limitação; $this->linhas = mysql_num_rows($result); //pega valor total de itens do banco; $this->paginas = ceil($this->linhas / $this->maximo) - 1; //pega número total de páginas pela quantidade máxima de itens; $this->nPaginas = $this->paginas; //guarda valor na variavel; $this->anterior = $this->pagina - 1; //informa o a página anterior; $this->proximo = $this->pagina + 1; //informa a próxima página; } /* RETORNA O RESULTADO DO SQL COM O LIMITE DE ITENS POR LINHA */ function getResult(){ return $this->result; } /* RETORNA NÚMERO DE ITENS POR PÁGINA */ function getNporPg(){ return $this->maximo; } /* RETORNA O NÚMERO TOTAL DE PÁGINAS */ function getNtotalPg(){ return ($this->nPaginas+1); } /* RETORNA O BOTÃO PRIMEIRO E O ANTERIOR */ function getAnterior($on, $off){ if($this->btn_primeiro_on == true){ //se botão primeiro ativado; if($this->pagina == 1){ //se é primeira página; echo "".$this->btn_primeiro." "; //botão off }else{ if($this->urlAdicional != ""){ echo "urlAdicional."&pagina=1\">".$this->btn_primeiro." "; //botão on }else{ echo "".$this->btn_primeiro." "; //botão on } } } if($this->anterior > 0){ //se anterior maior que 0; if($this->urlAdicional != ""){ echo "urlAdicional."&pagina=".$this->anterior."\">".$this->btn_anterior." "; //botão on }else{ echo "anterior."\">".$this->btn_anterior." "; //botão on } }else{ echo "".$this->btn_anterior." "; //botão off } } /* RETORNA O NÚMERO DE PÁGINAS PARA NAVEGAÇÃO */ function getPaginas($on){ $sp = explode(";", $this->sp); //pega variaves de separação de botões de nº de pg; //===============================================================\ //[ EXIBE PAGINAÇÂO NO ESTILO ] | //[ < Anterior 1 2 3 4 [5] 6 7 8 Próximo > ] | //[ < Anterior 1 2 3 4 5 [6] 7 8 Próximo > ] | //[ o número de páginas total é mostrado . . . ] | //===============================================================| if($this->estilo == 1){ echo" ".$sp[0]." "; for($i=0; $i <= $this->nPaginas; $i++){ $pag = $i +1; if($this->urlAdicional != ""){ echo " urlAdicional."&pagina=".$pag."\">"; }else{ echo " "; } if($this->zero == true && $pag < 10){ $pag = "0".$pag; } if($pag == $this->pagina){ echo "[".$pag."]"; }else{ echo $pag; } echo " "; } echo" ".$sp[1]." "; } //===============================================================| //[ FIM PG 01 ] | //===============================================================/ //===============================================================\ //[ EXIBE PAGINAÇÂO NO ESTILO ] | //[ << Primeiro < Anterior 1 2 3 [4] 5 6 7 Próximo > Último >> ] | //[ << Primeiro < Anterior 2 3 4 [5] 6 7 8 Próximo > Último >> ] | //===============================================================| if($this->estilo == 2){ echo" ".$sp[0]." "; //separador if($this->pagina < 5){ $i = 0; if($this->nPaginas > 5){ $j = 6; }else{ $j = $this->nPaginas; } }else{ if($this->pagina == 5 && $this->nPaginas <= 5){ $i = 0; $j = $this->pagina - 1; }else{ if($this->pagina <= ($this->nPaginas + 1)){ $i = ($this->pagina - 4); $j = $this->pagina + 2; if($j > $this->nPaginas){ if($this->pagina == ($this->nPaginas+1)){ $j = $this->pagina - 1; $teste = ($this->nPaginas + 3) - $j; $i = $i - $teste; }else{ if($this->pagina == 6){ //[INICIO][correção 18/05/2008] if($this->getNtotalPg() == 8){ $i = ($i - 1); $j = $this->pagina + 1; }else{ $i = ($i - 2); //[correção 17/05/2008] $j = $this->pagina + 0; } //[FIM][correção 18/05/2008] }else{ $i = ($this->pagina - 5); if($j > $this->nPaginas){ $j = $this->nPaginas; if(($this->pagina+1) == ($this->nPaginas+1)){ $teste = ($this->nPaginas + 1) - $j; $i = $i - $teste; } } } } } }else{ $i = 0; $j = $this->nPaginas; } } } for($i; $i <= $j; $i++){ $pag = $i +1; if($this->urlAdicional != ""){ echo " urlAdicional."&pagina=".$pag."\">"; }else{ echo " "; } if($this->zero == true && $pag < 10){ $pag = "0".$pag; } if($pag == $this->pagina){ echo "[".$pag."]"; }else{ echo $pag; } echo " "; } echo" ".$sp[1]." "; //separador; } //===============================================================| //[ FIM PG 02 ] | //===============================================================/ } /* RETORNA O BOTÃO PROXIMO E O ÚLTIMO */ function getProximo($on, $off){ if($this->pagina <= $this->paginas){ //se página menor ou igual a numero total de páginas; if($this->urlAdicional != ""){ echo "urlAdicional."&pagina=".$this->proximo."\">".$this->btn_proximo." "; //botão on }else{ echo "proximo."\">".$this->btn_proximo." "; //botão on } }else{ echo "".$this->btn_proximo." "; //botão off } if($this->btn_ultimo_on == true){ //se botão último ativado if($this->pagina > $this->nPaginas){ //se página maior que número total de páginas; echo "".$this->btn_ultimo." "; //botão off; }else{ if($this->urlAdicional != ""){ echo "urlAdicional."&pagina=".($this->nPaginas+1)."\">".$this->btn_ultimo." "; //botão on }else{ echo "nPaginas+1)."\">".$this->btn_ultimo." "; //botão on } } } } } //==================\ //[ FIM DA CLASSE ] | //==================/ ?>