<?php
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//
// CLASSE GENÉRICA DE PAGINAÇÃO USANDO A CLASSE DE MYSQL COMO APOIO
// @copyright Copyright (c) 2009, Bruno Luiz
//
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class paginacao
{
/* Variaveis */
public $Mysql;
public $termo_busca;
public $chave;
public $chave_tabela;
public $resultado_por_pagina;
public $pagina_atual;
public $ordenacao;
public $ResultadoTotal;
public $modulo;
public $acao;
public $inicio_paginacao;
public $fim_paginacao;
public $display_status;
public $condicao_pesquisa;
public $proxima_pagina;
public $pagina_anterior;
public $limite_paginacao;
public $tabela;
public $sql_count;
public function __construct()
{
$this->Mysql = new Mysql();
}
public function Verificar()
{
if( empty($this->chave) )
{
$this->chave = '0';
}
if( empty($this->resultado_por_pagina) )
{
$this->resultado_por_pagina = '10';
}
if( empty($this->pagina_atual) )
{
$this->pagina_atual = '1';
}
if( empty($this->ordenacao) )
{
$this->ordenacao = 'DESC';
}
}
public function VerificarData($data)
{
$dia = $desmonta[0];
$mes = $desmonta[1];
$ano = $desmonta[2];
return $ano."-".$mes."-".$dia;
}
/* Imprime o status da busca quando o formulario foi postado */
public function Status()
{
$this->inicio_paginacao = ( $this->pagina_atual - 1 ) * $this->resultado_por_pagina + 1 ;
$this->fim_paginacao = $this->pagina_atual * $this->resultado_por_pagina; /* final da tabulação */
if( $this->fim_paginacao > $this->ResultadoTotal ) $this->fim_paginacao = $this->ResultadoTotal;
if( empty($this->termo_busca) )
{
$this->display_status = "Nenhum termo definido, listando todo o conteudo ";
}
else
{
$this->display_status = $this->termo_busca;
}
}
public function ResultadoTotal($sql)
{
if( $this->Mysql->select($sql) && $this->Mysql->LinhasSelects() < 1 )
{
$this->ResultadoTotal = "Erro";
return false;
}
else
{
return true;
}
}
public function MostrarResultado($sql, $tabela)
{
$mostrar = (int)$this->resultado_por_pagina ;
$partida = ( $this->pagina_atual - 1 ) * $this->resultado_por_pagina ;
$sql_final = " $sql LIMIT $partida , $mostrar ";
//echo $sql_final;
$this->ResultadoTotal($sql);
if( $this->Mysql->select($sql_final) && $this->Mysql->LinhasSelects() > 0 )
{
return true;
}
else
{
return false;
}
}
/* este filtro defini quantos resultados por pagina irá aparecer */
public function FiltroResultado()
{
/* controle recebe total de resultados da busca menos a pagina atual */
$controle = $this->ResultadoTotal - $this->pagina_atual;
/* Verifico se o resto da divisão de controle pela atual é igual a zero */
if( $controle % $this->pagina_atual == 0 )
{
/* divide o valor do controle pela pagina atual e adiciona mais um */
$controle = $controle/$this->pagina_atual+1;
}
else
{
/* divide o valor do controle pela pagina atual */
$controle = ceil( $controle/$this->pagina_atual );
}
echo "<input type=\"submit\" class=\"filtro\" value=\"OK\" />\n\r\t";
echo"<select name=\"rpp\" id=\"\" class=\"filtro\" type=\"select-one\">\n\r\t";
$count = 1;
for( $count; $count <= $controle; $count++ )
{
echo "<option value=\"$count\">$count</option>\n\r\t";
}
echo '</select>';
}
public function MostrarPaginacao($link)
{
// criando os links de navegação
echo "<div id=\"pages\"><ul id=\"paginacao\">";
// divide o resultado total pela quantidade de pagina que queremos pegando o maior inteiro
$total = ceil($this->ResultadoTotal/$this->resultado_por_pagina );
$this->pagina_anterior = $this->pagina_atual - 1;
$this->proxima_pagina = $this->pagina_atual + 1;
$link_padrao = $link;
if( $this->pagina_atual <= 1 )
{
echo "<span class=\"nolink\">« Voltar</span> ";
}
else
{
// Botao voltar quando pagina atual é maior que um
echo "<span><a href=\"$link_padrao&pg=$this->pagina_anterior#resultado\">« Voltar</a></span>";
}
$this->limite_paginacao = 10;
$count = 0;
$marcador = 1;
if( $this->pagina_atual < $this->limite_paginacao )
{
$this->limite_paginacao = $this->pagina_atual-1;
}
else
{
if( $this->limite_paginacao == $this->pagina_atual )
{
$this->limite_paginacao = $this->limite_paginacao - 1;
}
else
{
$marcador = $this->pagina_atual - $this->limite_paginacao;
}
}
// imprimindo as paginas anteriores em relação pagina atual
for( $count; $count < $this->limite_paginacao; $count++ )
{
echo "<span><a href=\"$link_padrao&pg=$marcador#resultado\">$marcador</a></span>\n\t";
$marcador++;
}
// imprimindo pagina atual
echo "<span class=\"atual\">$this->pagina_atual</a></span>\n\t";
// BOTOES DE NAVEGAÇÃO ADIANTE EM RELAÇÃO A PAGINA ATUAL
$limite_adiante = 10;
$count = 0;
if( ($total - $this->pagina_atual) < $limite_adiante )
{
$limite_adiante = $total - $this->pagina_atual;
}
// imprimindo as paginas anteriores a selecao atual
for( $count; $count < $limite_adiante ; $count++ )
{
$pagina = $this->pagina_atual+$count+1;
echo "<span><a href=\"$link_padrao&pg=$pagina#resultado\">$pagina</a></span>\n\t";
}
// Verificando e imprimindo o botão de avançar
if( $this->pagina_atual == $total )
{
echo "<span class=\"nolink\">Avançar »</span>";
}
else
{
echo "<span><a href=\"$link_padrao&pg=$this->proxima_pagina#resultado\">Next »</a></span>";
}
// fim do espaço
echo "</ul></div>";
}
}
?>