Sei sulla pagina 1di 9

<?php /* * CLASSE DE PGINAO EM PHP + MYSQL * AUTOR : dson Kuzniewski (Br0w) * E-MAIL: contato@edsonk.com * DATA : 18/12/2009 * VERSO: 1.2.2.

2 */ /* * [ INFO DE ATUALIZAO ] * * 1 - Modo de retorno de paginao alterada para 'return' para poder utilizar o 'Sma rty Template'; */ /** [MODO DE USAR] = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = \ // COM O SMARTY TEMPLATE // ADICIONE CONFORME O INDICADO ABAIXO NO CODIGO... // SEGUE AS PARTES DO CODIGO SUBSTITUA OU ADICIONE CONFORME NO EXEMPLO DO CODIGO ORIGINAL... // PARTE 01 ---------------------------\ //Adicione a classe na pgina no qual ira usar o Smarty Template se o usar caso co ntrario comente a linha... require_once("lib/Smarty/Smarty.class.php"); //Configuraes iniciais do Smarty Template se o usar caso contrario comente as linh as... $smarty = new Smarty; $smarty->debugging = false; $smarty->caching = false; $smarty->cache_lifetime = 60; $smarty->template_dir = "templates/"; $smarty->compile_dir = "templates_c/"; $smarty->config_dir = "configs/"; $smarty->cache_dir = "cache/"; // FIM PARTE 01 -----------------------/ // PARTE 02 ---------------------------\ //Caso use o Smarty utilize deste modo, caso contrario comente estas linhas... while($row = mysql_fetch_array($paginacao->getResult())){ $listaDeItens[] = $row['item']; } // FIM PARTE 02 -----------------------/ // PARTE 03 ---------------------------\ $smarty->assign('header', $header); $smarty->assign('pgAnterior', $paginacao->getAnterior("paginacao_on","paginacao_ off")); $smarty->assign('pgNumero', $paginacao->getPaginas("paginacao_paginas")); $smarty->assign('pgProximo', $paginacao->getProximo("paginacao_on","paginacao_of f")); $smarty->assign('listaDeItens', $listaDeIntens); // FIM PARTE 03 -----------------------/ // PARTE 04 ---------------------------\

$smarty->display('meuTemplate.tpl'); // FIM PARTE 04 -----------------------/ //TEMPLATE DO SMARTY FICARA DESTE MODO -----------------\ {$pgAnterior}{$pgNumero}{$pgProximo} <table width="100%"> {section name=i loop=$listaDeItens} <tr bgcolor="{cycle values="#EBEBEB,#FFFFFF"}"> <td> {$listaDeItens[i]} </td> </tr> {/section} </table> {$pgAnterior}{$pgNumero}{$pgProximo} //------------------------------------------------------/ // EXEMPLO DO CODIGO NORMAL ----------------------\ //Adicione a classe na pgina no qual ira usar require_once("class.Paginacao.php"); // PARTE 01 - ADICIONAR - SMARTY TEMPLATE //Criando uma conexo MySQL if (!($conexao = mysql_connect('localhost', 'usuario', 'senha'))) { echo "No foi possvel estabelecer uma conexo com o gerenciador MySQL. Favor Contacta r o Administrador."; exit; } $banco = "meuBancoDeDados"; //Define o banco no qual est se referindo a consulta! //Crie um sql no qual queira que o resultado seja mostrado com paginao;*********** ************************ $sql = "SELECT * FROM tabela WHERE se tiver ORDER BY id ASC ou DESC"; $paginacao = new Paginacao(); //Cria a paginao; $paginacao->setMaximo("20"); //Define numro de itens por pgina se no fica o padro de 10; $paginacao->setEstilo("2"); //Define o estilo de paginao, mude se quizer 1 ou 2; $paginacao->setBtnPrimeiro("[Primeiro]"); //Define texto do boto de padro st definido mude se quizer; $paginacao->setBtnUltimo("[ltimo]"); //Define texto do boto de padro st definido mude se quizer; $paginacao->setBtnAnterior("[Anterior]"); //Define texto do boto de padro st definido mude se quizer; $paginacao->setBtnProximo("[Prximo]"); //Define texto do boto de padro st definido mude se quizer; $paginacao->setBtnPrimeiroOn(true); //Define texto do boto de padro st definido mude se quizer; $paginacao->setBtnUltimoOn(true); //Define texto do boto de padro st definido mude se quizer; $paginacao->setUrlAdicional("id=1&amp;amp;amp;categoria=3&amp;amp;amp;texto=asdf g"); //Define a url adicional passada por parmetro via url opcional;

j e j e j e j e j e j e

$paginacao->setZero(true); //coloca zero aos nmeros baixos de 10; 01 02... padro ativado (true/false); $paginacao->getNporPg(); //RETORNA NMERO DE ITENS POR PGINA $paginacao->getNtotalPg(); //RETORNA O NMERO TOTAL DE PGINAS $paginacao->__start($banco, $sql, $conexao);//Inicia a pginao; $i=0; while($row = mysql_fetch_array($paginacao->getResult())){ echo"linha com item n $i = ".$row['item']."<br>"; $i++; } // PARTE 02 - SUBSTITUIR PELO WHILE ACIMA - SMARTY TEMPLATE //Para mostrar a paginao coloque em sua pgina HTML ou echo $paginacao->getAnterior("estilo_on","estilo_off"); estilos referidos so CSS echo $paginacao->getPaginas("estilo_paginas"); los referidos so CSS echo $paginacao->getProximo("estilo_on","estilo_off"); tilos referidos so CSS PHP:*********************** //Cria boto anterior, os //Cria n de pg., os esti //Cria boto prximo, os es

//Sendo assim junte todos que o resultado seria:******************************** ********* echo $paginacao->getAnterior("paginacao_on","paginacao_off") . $paginacao->getPa ginas("paginacao_paginas") . $paginacao->getProximo("paginacao_on","paginacao_of f"); // PARTE 03 - SUBSTITUIR PELO CODIGO ACIMA - SMARTY TEMPLATE // PARTE 04 - ADICIONAR - SMARTY TEMPLATE //RESULTADO DEPENDE DO ESTILO************************************************* [ESTILO 1] < Anterior 1 2 3 4 [5] 6 7 8 Prximo > < Anterior 1 2 3 4 5 [6] 7 8 Prximo > o nmero de pginas total mostrado sendo no exemplo 8 pginas . . . [ESTILO 2] << Primeiro < Anterior 1 2 3 [4] 5 6 7 Prximo > ltimo >> se tiver mais que 7 ele comea a tira 1 no comeo e adicionar 1 no fim . . . << Primeiro < Anterior 2 3 4 [5] 6 7 8 Prximo > ltimo >> [FIM DO MODO DE USAR] = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = / **/ //=====================\ //[ INICIO DA CLASSE ] | //=====================/ class Paginacao { var $maximo; nmero de itens por pgina; var $pagina; nmero da pgina; var $mat; avel para calculo de pginas; var $inicio;

//variavel de //controle do //vari //controle de

exibio de itens inicio; var $paginas; //variavel par a calculo de pginas; var $linhas; //nmero total d e itens; var $anterior; //controle de pgina anterior; var $proximo; //controle de proxima pgina; var $result; //result do sq l; var $nPaginas = 0; //nmero total de pginas; var $btn_primeiro = "<< Primeiro"; //texto do boto com o lin k para a primeiro pgina; var $btn_anterior = "< Anterior"; //texto do boto com o link para pgina anterior; var $btn_proximo = "Prximo >"; //texto do boto com o link para prxima pgina; var $btn_ultimo = "ltimo >>"; //texto do boto com o link para a ltima pgina; var $sp = "/;\\"; //separa botes de n pg. OBS: use ;(ponto e virgula para separar os lados); var $btn_primeiro_on = true; //ativa e desativa o boto prime iro (true|false); var $btn_ultimo_on = true; //ativa e desativa o b oto ltimo (true|false); var $estilo = 2; //define estil o de paginao; var $urlAdicional; //define url a dicional passada por parmetro pela url; var $zero = true; //coloca zero aos nmeros baixos de 10; 01 02... /* CONSTRUTOR */ function Paginacao(){ } /* SETA O NUMERO DE ITENS POR PGINA */ function setMaximo($var){ $this->maximo = $var; } /* SETA SEPARADORES DE BOTES DE NMERO DE PGINAS */ function setSP($var){ $this->sp = $var; } /* SETA O TEXTO DO BOTO PRIMEIRO */ function setBtnPrimeiro($var){ $this->btn_primeiro = $var; } /* SETA O TEXTO DO BOTO ANTERIOR */ function setBtnAnterior($var){ $this->btn_anterior = $var; } /* SETA O TEXTO DO BOTO PROXIMO */ function setBtnProximo($var){ $this->btn_proximo = $var; }

/* SETA O TEXTO DO BOTO LTIMO */ function setBtnUltimo($var){ $this->btn_ultimo = $var; } /* DEFINE SE O BOTO PRIMEIRO VAI SER EXIBIDO */ function setBtnPrimeiroOn($var){ $this->btn_primeiro_on = $var; } /* DEFINE SE O BOTO LTIMO VAI SER EXIBIDO */ function setBtnUltimoOn($var){ $this->btn_ultimo_on = $var; } /* DEFINE O ESTILO DE PAGINAO */ function setEstilo($var){ $this->estilo = $var; } /* DEFINE URL ADICIONAR PARMETROS PASSADOS PELA URL */ function setUrlAdicional($var){ $this->urlAdicional = $var; } /* ATIVA O ZERO */ function setZero($var){ $this->zero = $var; } /* INICIALIZAO DO OBJETO */ function __start($banco, $sql, $conexao){ if($this->maximo == ""){ //se no for setado nmero de itens por pgina pega o padro; $this->maximo = 10; } if($_REQUEST["pagina"] == "") { $this->pagina = "1"; //se pgina igual a branco seta pgina = 1; }else{ $this->pagina = $_REQUEST["pagina"]; //pega o nmero da pgina passada por parmetro e x:?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 pgina; $limita = $sql." LIMIT ".$this->inicio.",".$this->maximo; //gera o sql para pesq uisa no banco com a limitao; $this->result = mysql_db_query($limita); //executa sql com a limitao; $result = mysql_db_query($sql); //executa sql sem a limitao; $this->linhas = mysql_num_rows($result); //pega valor total de itens do banco; $this->paginas = ceil($this->linhas / $this->maximo) - 1; //pega nmero total de pg inas pela quantidade mxima de itens; $this->nPaginas = $this->paginas; //guarda valor na variavel; $this->anterior = $this->pagina - 1; //informa o a pgina anterior; $this->proximo = $this->pagina + 1; //informa a prxima pgina; }

/* RETORNA O RESULTADO DO SQL COM O LIMITE DE ITENS POR LINHA */ function getResult(){ return $this->result; } /* RETORNA NMERO DE ITENS POR PGINA */ function getNporPg(){ return $this->maximo; } /* RETORNA O NMERO TOTAL DE PGINAS */ function getNtotalPg(){ return ($this->nPaginas+1); } /* RETORNA O BOTO PRIMEIRO E O ANTERIOR */ function getAnterior($on, $off){ $retorna = ""; if($this->btn_primeiro_on == true){ //se boto primeiro ativado; if($this->pagina == 1){ //se primeira pgina; $retorna .= "<span class=\"".$off."\">".$this->btn_primeiro."</span> "; //boto of f }else{ if($this->urlAdicional != ""){ $retorna .= "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&amp;amp; amp;pagina=1\">".$this->btn_primeiro."</a></span> "; //boto on }else{ $retorna .= "<span class=\"".$on."\"><a href=\"?pagina=1\">".$this->btn_primeiro ."</a></span> "; //boto on } } } if($this->anterior > 0){ //se anterior maior que 0; if($this->urlAdicional != ""){ $retorna .= "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&amp;amp; amp;pagina=".$this->anterior."\">".$this->btn_anterior."</a></span> "; //boto on }else{ $retorna .= "<span class=\"".$on."\"><a href=\"?pagina=".$this->anterior."\">".$ this->btn_anterior."</a></span> "; //boto on } }else{ $retorna .= "<span class=\"".$off."\">".$this->btn_anterior."</span> "; //boto of f } return $retorna; } /* RETORNA O NMERO DE PGINAS PARA NAVEGAO */ function getPaginas($on){ $retorna = ""; $sp = explode(";", $this->sp); //pega variaves de separao de botes de n de pg; // = = = = = = = = = = = = = = = = = = = = = = = = = \ //[ EXIBE PAGINAO NO ESTILO //[ < Anterior 1 2 3 4 [5] 6 7 8 Prximo //[ < Anterior 1 2 3 4 5 [6] 7 8 Prximo //[ o nmero de pginas total mostrado // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > > . . . = = = = = = = = = = = ] ] ] ] = | | | | = = = = = = = =

= = = = = = | if($this->estilo == 1){ $retorna .= " <b>".$sp[0]."</b> "; for($i=0; $i <= $this->nPaginas; $i++){ $pag = $i +1; if($this->urlAdicional != ""){ $retorna .= " <span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&amp;amp ;amp;pagina=".$pag."\">"; }else{ $retorna .= " <span class=\"".$on."\"><a href=\"?pagina=".$pag."\">"; } if($this->zero == true &amp;amp;amp;&amp;amp;amp; $pag < 10){ $pag = "0".$pag; } if($pag == $this->pagina){ $retorna .= "[<b>".$pag."</b>]"; }else{ $retorna .= $pag; } $retorna .= "</a></span> "; } $retorna .= " <b>".$sp[1]."</b> "; } // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | //[ FIM PG 01 ] | // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = / // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = \ //[ EXIBE PAGINAO NO ESTILO ] //[ << Primeiro < Anterior 1 2 3 [4] 5 6 7 Prximo > ltimo >> ] //[ << Primeiro < Anterior 2 3 4 [5] 6 7 8 Prximo > ltimo >> ] // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | if($this->estilo == 2){ $retorna .= " <b>".$sp[0]."</b> "; //separador if($this->pagina < 5){ $i = 0; if($this->nPaginas > 5){ $j = 6; }else{ $j = $this->nPaginas; } }else{ if($this->pagina == 5 &amp;amp;amp;&amp;amp;amp; $this->nPaginas $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){ = = = = = = = = | | | = = = = = = = =

<= 5){

//[INICIO][correo 18/05/2008] if($this->getNtotalPg() == 8){ $i = ($i - 1); $j = $this->pagina + 1; }else{ $i = ($i - 2); //[correo 17/05/2008] $j = $this->pagina + 0; } //[FIM][correo 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 != ""){ $retorna .= " <span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&amp;amp ;amp;pagina=".$pag."\">"; }else{ $retorna .= " <span class=\"".$on."\"><a href=\"?pagina=".$pag."\">"; } if($this->zero == true &amp;amp;amp;&amp;amp;amp; $pag < 10){ $pag = "0".$pag; } if($pag == $this->pagina){ $retorna .= "[<b>".$pag."</b>]"; }else{ $retorna .= $pag; } $retorna .= "</a></span> "; } $retorna .= " <b>".$sp[1]."</b> "; //separador; } // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | //[ FIM PG 02 ] | // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = / return $retorna; } /* RETORNA O BOTO PROXIMO E O LTIMO */ function getProximo($on, $off){ $retorna = ""; if($this->pagina <= $this->paginas){ //se pgina menor ou igual a numero total de pginas;

if($this->urlAdicional != ""){ $retorna .= "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&amp;amp; amp;pagina=".$this->proximo."\">".$this->btn_proximo."</a></span> "; //boto on }else{ $retorna .= "<span class=\"".$on."\"><a href=\"?pagina=".$this->proximo."\">".$t his->btn_proximo."</a></span> "; //boto on } }else{ $retorna .= "<span class=\"".$off."\">".$this->btn_proximo."</span> "; //boto off } if($this->btn_ultimo_on == true){ //se boto ltimo ativado if($this->pagina > $this->nPaginas){ //se pgina maior que nmero total de pginas; $retorna .= "<span class=\"".$off."\">".$this->btn_ultimo."</span> "; //boto off; }else{ if($this->urlAdicional != ""){ $retorna .= "<span class=\"".$on."\"><a href=\"?".$this->urlAdicional."&amp;amp; amp;pagina=".($this->nPaginas+1)."\">".$this->btn_ultimo."</a></span> "; //boto o n }else{ $retorna .= "<span class=\"".$on."\"><a href=\"?pagina=".($this->nPaginas+1)."\" >".$this->btn_ultimo."</a></span> "; //boto on } } } return $retorna; } } //==================\ //[ FIM DA CLASSE ] | //==================/ ?>