narizgudo 0 Denunciar post Postado Abril 9, 2008 /* AGORA COM VISIBILIDADE */ /* NÃO DEPENDE DA CLASSE DE GERENCIAMENTO DO DB */ /* ADIDIONADA A VARIAVEL $EXTRA */ /* ATUALIZADA 12/08/2008 */ Ae, fiz uma classe para paginação de resultados, bem simples de usar e não exibe nenhum estilo pre-definido, assim fica facil adaptar a qualquer site. comentem! COMENTEM! A classe: <? class paginacao { /** * Classe de gerenciamento do banco de dados * * @var object */ protected $db; /** * Resultados por página * * @var int */ public $rpp = 10; /** * Comando SQL para pesquisar os resultados * * @var string */ public $sql = false; /** * Variável com os dados finais * * @var array */ public $fim = array(); /** * Variável com total de páginas extras além da atual * * @var int */ public $extra = 3; public function __construct() { global $db; // pega a variável $db do escopo global $this->db = $db; // guarda a variável $db na variável $this->db } public function montaPaginacao() { if (!$this->sql) return false; // interrompe a execução se não tiver nenhuma query $this->sql = preg_replace("'LIMIT.*'","",$this->sql); // retira o LIMIT da query case tenha $pagina = (isset($_GET['p'])) ? intval($_GET['p']) : 1; // pega a página da URL ou define como a primeria página $total = $this->db->sql_query($this->sql); // envia query $total = $this->db->sql_numrows($total); // pega o total de resultados $this->fim['mostrando'] = array($pagina*$this->rpp-$this->rpp+1,(($total < $pagina*$this->rpp) ? $total : $pagina*$this->rpp)); $this->fim['totalresultados'] = $total; // Total de resultados no banco de dados $total = ceil($total/$this->rpp); // pega o total de páginas $this->fim['paginaatual'] = $pagina; // Página atual $this->fim['totalpaginas'] = $total; // Total de páginas $limite = $pagina*$this->rpp-$this->rpp.",".$this->rpp; // define o limite de pesquisa $this->sql .= " LIMIT $limite"; // coloca o LIMIT na query $q = $this->db->sql_query($this->sql); // envia query if ($this->db->sql_numrows($q) > 0) { // verifica se existe algum resultado $this->fim['status'] = 'ok'; // coloca o status da pesquisa como ok while ($linha = $this->db->sql_fetchrow($q)) $this->fim['resultados'][] = $linha; // coloca os valores da pesquia na variável fim $min = $pagina-$this->extra; // coloca as 3 páginas anteriores while ($min <= 0) $min++; // tira valores negativos e 0 das páginas anteriores $max = $pagina+$this->extra; // coloca as 3 próximas páginas while ($max > $total) $max--; // tira os valores que passam do total de páginas if ($pagina > 1) { // se nao for a primeira página $this->fim['paginas'][] = array('n' => 1, 't' => '<<'); // coloca o indicador da primeira página $this->fim['paginas'][] = array('n' => $pagina-1, 't' => '<'); // coloca o indicador da página anterior for ($x=$min;$x<$pagina;$x++) $this->fim['paginas'][] = array('n' => $x, 't' => $x); // coloca as 3 páginas anteriores } $this->fim['paginas'][] = array('n' => $pagina, 't' => 'atual'); // coloca a página final if ($pagina < $total) { // se nao for a ultima for ($x=$pagina+1;$x<=$max;$x++) $this->fim['paginas'][] = array('n' => $x, 't' => $x); // coloca o indicador da ultima página $this->fim['paginas'][] = array('n' => $pagina+1, 't' => '>'); // coloca o indicador da próxima página $this->fim['paginas'][] = array('n' => $total, 't' => '>>'); // coloca as 3 próximas páginas } } else { $this->fim['status'] = 'sr'; // retorna sr se não tiver resultados } return $this->fim; // retorna os valores da consulta } } Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 12, 2008 Já que você está usando __construct() (construtor para PHP 5), use visibilidade (public, private e protected) nos métodos e propriedades de classe, em vez de var. http://www.php.net/manual/pt_BR/language.oop5.visibility.php http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
narizgudo 0 Denunciar post Postado Abril 14, 2008 Vlw beraldo jah tinha visto essa parada d visibilidade mas nunca tive paciencia pra ler com atenção, mas agora vo ta um jeito... Compartilhar este post Link para o post Compartilhar em outros sites
Davide Ricardo 0 Denunciar post Postado Julho 31, 2008 viva, tentei utilizar o teu código, mas deu erro Fatal error: Call to undefined method stdClass::montaPaginacao() ........ Compartilhar este post Link para o post Compartilhar em outros sites
narizgudo 0 Denunciar post Postado Julho 31, 2008 É pq você não instaciou a classe. antes da linha $pg->sql = "SELECT * FROM tabela WHERE campo = '0' ORDER BY data DESC"; // query sql a ser executada coloca $pg = new paginacao(); ficando assim $pg = new paginacao(); $pg->sql = "SELECT * FROM tabela WHERE campo = '0' ORDER BY data DESC"; // query sql a ser executada ... Abraços Compartilhar este post Link para o post Compartilhar em outros sites
DeToNeS 0 Denunciar post Postado Novembro 13, 2008 Boa Noite a Todos, Gente sou iniciante com PHP, atualmente utilizo uma classe desenvolvida por um membro da comunidade"Fabyo". Gostaria de saber como posso aplicar o seu sistema de paginação junto a classe de conexão feita por ele! <table width="100%" class="altera_usuario"> <tr> <td class="t">ID</td> <td class="t">Nome</td> <td class="t">E-mail</td> <td class="t">Celular</td> <td class="t">Usuário</td> <td class="t">Entidade</td> <td class="t">Status</td> <td class="t">Ação</td> </tr> <?php $classe =& Singleton::factory( "Conexao" ); $re = $classe->Executar("SELECT * FROM usuarios"); while ($exibe = $re->fetch_array(MYSQLI_ASSOC)) { echo " <tr> <td class='c'>" . $exibe["id_usuario"] . "</td> <td class='c'>" . $exibe["nome"] . " " . $exibe["sobrenome"] . "</td> <td class='c'>" . $exibe["email"] . "</td> <td class='c'>" . $exibe["celular"] . "</td> <td class='c'>" . $exibe["usuario"] . "</td> <td class='c'>" . $exibe["entidade"] . "</td> <td class='c'>" . $exibe["status"] . "</td> <td class='c'><a href='?secury=usuarios&op=A&us=" . $exibe["id_usuario"] . "' title='Alterar Usuário'>Alterar</a></td> </tr> "; } $classe->Fechar(); ?> </table> Queria incluir a paginação nesse script, se alguém puder me ajudar eu agradeço! Abraços! Compartilhar este post Link para o post Compartilhar em outros sites