PUBLICIDADE

Autor

ulisses

Ulisses Roberto

membro deste dezembro de 2006

Compartilhe e guarde

  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Faves: Fave It!

PUBLICIDADE

Enquete

Você acredita que um dia o Firefox será mais utilizado que o IE?

Classe Navbar de paginação de resultados em PHP


Classe muito útil para criar automaticamente links de navegação, como "Página Anterior", "Próxima Página" e os links de numeração de páginas.

É totalmente customizável, e roda com MySQL e PostgreSQL
<?php  
/*  
A classe navbar de Copyright Joao Prado Maia (jpm@phpbrasil.com) e tradução de  
Thomas Gonzalez Miranda (thomasgm@hotmail.com) baixada do site www.phpbrasil.com  
em 06/05/2002 foi modificada para melhor entendimento do seu funcionamento e  
aperfeiçoada deste que apareceram alguns "bugs", sendo transformada como classe  
Mult_Pag (Multiplas paginas).  
As informações acima foram retiradas da versão 1.3 da classe navbar do arquivo  
navbar.zip.  
Adaptação realizada por Marco A. D. Freitas (madf@splicenet.com.br) entre  
06 e 09/05/2002.  
Adaptação realizada por Paulo Enok Sawazaki (pauloeno@yahoo.com.br) em 26/06/2006.  

Construi esta pequena classe para navegação dinâmica de links. Observe  
por favor a simplicidade deste código. Este código é livre em  
toda maneira que você puder imaginar. Se você o usar em seu  
próprio script, por favor deixo os créditos como estão. Também,  
envie-me um e-mail se você o fizer, isto me deixa feliz :-)  

Abaixo está um exemplo de como utilizar esta classe:  
=====================================================  
*/  
// conexao ao BD  
$conexao = mysql_connect("servidor", "root", "senha");  
mysql_select_db("banco_de_dados");  

// definicoes de variaveis  
$max_links = 100; // máximo de links à serem exibidos  
$max_res = 3; // máximo de resultados à serem exibidos por tela ou pagina  
$mult_pag = new Mult_Pag(); // cria um novo objeto navbar  
$mult_pag->num_pesq_pag = $max_res; // define o número de pesquisas (detalhada ou não) por página  
// consulta a ser realizada, abaixo consta um exemplo:  
$sql = "SELECT * FROM tabela";  

// metodo que realiza a pesquisa  
$resultado = $mult_pag->executar($sql, $conexao, "", "mysql");  
$reg_pag = mysql_num_rows($resultado); // total de registros por paginas ou telas  


// visualizacao do conteudo  
for ($n = 0; $n < $reg_pag; $n++) {  
  $linha = mysql_fetch_object($resultado); // retorna o resultado da pesquisa linha por linha em um array  
  // relaciona o resultado com o seu devido campo da tabela, por exemplo:  
  $email = $linha->nome_do_campo_na_tabela($nome);  
  $nome = $linha->nome_do_campo_na_tabela($email); ;  
  $comentario = $linha->nome_do_campo_na_tabela($comentario); ;  

  echo "  
<link  href='./style.css' rel='stylesheet' type='text/css' >  
<TABLE WIDTH=\"100%\">  
<TR>  
<TD WIDTH=\"25%\">$nome</TD>  


<TD WIDTH=\"25%\">$email</TD>  


<TD WIDTH=\"25%\">$comentario</TD>  
</TR>  
</TABLE>";  
}  

// pega todos os links e define que 'Próxima' e 'Anterior' serão exibidos como texto plano  
$todos_links = $mult_pag->Construir_Links("todos", "sim");  
echo "<P>Esta é a lista de todos os links paginados</P>\n";  

for ($n = 0; $n < count($todos_links); $n++) {  
  echo $todos_links[$n] . "&nbsp;";  
}  

// função que limita a quantidade de links no rodape  
$links_limitados = $mult_pag->Mostrar_Parte($todos_links, $coluna, $max_links);  


echo "<P>Esta é a lista dos links limitados</P>\n";  
for ($n = 0; $n < count($links_limitados); $n++) {  
  echo $links_limitados[$n] . "&nbsp;";  
}  


// classe que multiplica paginas  
class Mult_Pag {  
  // Valores padrão para a navegação dos links  
  var $num_pesq_pag;  
  var $str_anterior = "Anterior";  
  var $str_proxima = "Próxima";  
  var $str_primeira= "Primeira";  
  var $str_ultima= "Última";  
  // Variáveis usadas internamente  
  var $nome_arq;  
  var $total_reg;  
  var $pagina;  

  /*  
     Metodo construtor. Isto é somente usado para setar  
     o número atual de colunas e outros métodos que  
     podem ser re-usados mais tarde.  
  */  
  function Mult_Pag ()  
  {  
    global $pagina;  
    $this->pagina = $pagina ? $pagina : 0;  
  }  

  /*  
     O próximo método roda o que é necessário para as queries.  
     É preciso rodá-lo para que ele pegue o total  
     de colunas retornadas, e em segundo para pegar o total de  
     links limitados.  

         $sql parâmetro:  
           . o parâmetro atual da query que será executada  

         $conexao parâmetro:  
           . a ligação da conexão do banco de dados  

         $tipo parâmetro:  
           . "mysql" - usa funções php mysql  
           . "pgsql" - usa funções pgsql php  
  */  
  function Executar($sql, $conexao, $velocidade, $tipo)  
  {  
    // variavel para o inicio das pesquisas  
    $inicio_pesq = $this->pagina * $this->num_pesq_pag;  

    if ($velocidade == "otimizada") {  
      $total_sql = preg_replace("/SELECT (.*?) FROM /sei", "'SELECT COUNT(*) FROM '", $sql);  
    } else {  
      $total_sql = $sql;  
    }    
    // tipo da pesquisa  
    if ($tipo == "mysql") {  
      $resultado = mysql_query($total_sql);  
      $this->total_reg = mysql_num_rows($resultado); // total de registros da pesquisa inteira        
      $sql .= " LIMIT $inicio_pesq, $this->num_pesq_pag";  
      $resultado = mysql_query($sql); // pesquisa com limites por pagina  
    }  
    else if ($tipo == "pgsql") {      
      $resultado = pg_exec($conexao, $total_sql);  
      if ( pg_numrows( $resultado )  > 0 ) {  
          // total de registros da pesquisa inteira  
         $this->total_reg = pg_numrows( $resultado );//pg_Result($resultado, 0, 0);  
      }  
      $sql .= " LIMIT $this->num_pesq_pag, $inicio_pesq";  
      $resultado = pg_Exec($conexao, $sql);// pesquisa com limites por pagina  
    }  
    return $resultado;  
  }  

  /*  
     Este método cria uma string que irá ser adicionada à  
     url dos links de navegação. Isto é especialmente importante  
     para criar links dinâmicos, então se você quiser adicionar  
     opções adicionais à estas queries, a classe de navegação  
     irá adicionar automaticamente aos links de navegação  
     dinâmicos.  
  */  
  function Construir_Url()  
  {  
    global $REQUEST_URI, $REQUEST_METHOD, $HTTP_GET_VARS, $HTTP_POST_VARS;  

    // separa o link em 2 strings  
    @list($this->nome_arq, $voided) = @explode("?", $REQUEST_URI);  

    if ($REQUEST_METHOD == "GET")    $cgi = $HTTP_GET_VARS;  
    else                             $cgi = $HTTP_POST_VARS;  
    reset($cgi); // posiciona no inicio do array  

    // separa a coluna com o seu respectivo valor  
    while (list($chave, $valor) = each($cgi))  
      if ($chave != "pagina")  
        $query_string .= "&" . $chave . "=" . $valor;  

    return $query_string;  
  }  

  /*  
     Este método cria uma ligação de todos os links da barra de  
     navegação. Isto é útil, pois é totalmente independete do layout  
     ou design da página. Este método retorna a ligação dos links  
     chamados no script php, sendo assim, você pode criar links de  
     navegação com o conteúdo atual da página.  

         $opcao parâmetro:  
          . "todos" - retorna todos os links de navegação  
          . "numeracao" - retorna apenas páginas com links numerados  
          . "strings" - retornar somente os links 'Próxima' e/ou 'Anterior'  

         $mostra_string parâmetro:  
          . "nao" - mostra 'Próxima' ou 'Anterior' apenas quando for necessários  
          . "sim" - mostra 'Próxima' ou 'Anterior' de qualqur maneira  
  */  
  function Construir_Links($opcao, $mostra_string)  
  {  
    $extra_vars = $this->Construir_Url();  
    $arquivo = $this->nome_arq;  
    $num_mult_pag = ceil($this->total_reg / $this->num_pesq_pag); // numero de multiplas paginas  
    $indice = -1; // indice do array final  
    $numero_links_proximos=4;  

    for ($atual = 0; $atual < $num_mult_pag; $atual++) {      
      
      // escreve a string esquerda (Pagina Anterior)  
      if ((($opcao == "todos") || ($opcao == "strings")) && ($atual == 0)) {  
        if ($this->pagina != 0){  
          $array[++$indice] = '<a href="' . $arquivo . '?pagina=' . $atual . $extra_vars . '">' . "Primeira" . '</a>';  
          $array[++$indice] = '<a href="' . $arquivo . '?pagina=' . ($this->pagina - 1) . $extra_vars . '">' . $this->str_anterior . '</a>';                 }  
        elseif (($this->pagina == 0) && ($mostra_string == "sim")){          
          $array[++$indice] = $this->str_primeira;  
          $array[++$indice] = $this->str_anterior;  
          }  
      }  

      // escreve a numeracao (1 2 3 ...)  
              

          
            
    if (($opcao == "todos") || ($opcao == "numeracao")) {            
      if (($atual > $this->pagina - $numero_links_proximos)&&($atual < $this->pagina + $numero_links_proximos) ){            
        if ($this->pagina == $atual){  
          $array[++$indice] = "<b>";  
          $array[++$indice] = ($atual > 0 ? ($atual + 1) : 1);  
          $array[++$indice] = "</b>";  
        }else{  
          if (($atual == ($this->pagina -($numero_links_proximos-1)))&&($atual != 0))      {  
                  $array[++$indice] = "<b>...</b>";  
          }          
          $array[++$indice] = '<a href="' . $arquivo . '?pagina=' . $atual . $extra_vars . '">' . ($atual + 1) . '</a>';  
          if (($atual == ($this->pagina +($numero_links_proximos-1)))&&($atual !=  $num_mult_pag-1)){  
              $array[++$indice] = "<b>...</b>";  
          }            
        }          
      }        
    }  
        

      // escreve a string direita (Proxima Pagina)  
      if ((($opcao == "todos") || ($opcao == "strings")) && ($atual == ($num_mult_pag - 1))) {  
        if ($this->pagina != ($num_mult_pag - 1)){  
          $array[++$indice] = '<a href="' . $arquivo . '?pagina=' . ($this->pagina + 1) . $extra_vars . '">' . $this->str_proxima . '</a>';          
           $array[++$indice] = '<a href="' . $arquivo . '?pagina=' . ($num_mult_pag-1) . $extra_vars . '">' . "Última" . '</a>';  
        }    
        elseif (($this->pagina == ($num_mult_pag - 1)) && ($mostra_string == "sim")){  
          $array[++$indice] = $this->str_proxima;  
          $array[++$indice] = $this->str_ultima;  
        }  
      }  
    }  
    return $array;  
  }  

  /*  
     Este método é uma extensão do método Construir_Links() para  
     que possa ser ajustado o limite 'n' de número de links na página.  
     Isto é muito útil para grandes bancos de dados que desejam não  
     ocupar todo o espaço da tela para mostrar toda a lista de links  
     paginados.  

         $array parâmetro:  
          . retorna o array de Construir_Links()  

         $atual parâmetro:  
          . a variável da 'pagina' atual das páginas paginadas. ex: pagina=1  

         $tamanho_desejado parâmetro:  
          . o número desejado de links à serem exibidos  
  */  
  function Mostrar_Parte($array, $atual, $tam_desejado)  
  {  

    
    $size = count($array);  
    if (($size <= 2) || ($size < $tam_desejado)) {  
      $temp = $array;  
    }  
    else {  
      $temp = array();  
      if (($atual + $tamanho_desejado) > $size) {  
        $temp = array_slice($array, $size - $tam_desejado);  
      } else {  
        $temp = array_slice($array, $atual, $tam_desejado);  
        if ($size >= $tamanho_desejado) {  
          array_push($temp, $array[$size - 1]);  
        }  
      }  
      if ($atual > 0) {  
        array_unshift($temp, $array[0]);  
      }  
    }  
    return $temp;  
  }  
}  

?>  

ArquivoTipoTamanhoHits 
Mult_Pag.phpArquivo PHP10,5 Kb1230Baixar o Arquivo
Sim   Não   Este código foi útil para você?
NotaComentário
Ainda não foi enviado nenhum comentário.
Regras:
Os comentários seguem as seguintes regras:
  • Todos os comentários são enviados por membros cadastrados no site.
  • A pontuação de comentários de conteúdo do próprio membro não serão computados.
  • Os comentários serão pré-aprovados, porém a equipe do site revisará o conteúdo de todos os comentários podendo ser invalidados (inclusive a pontuação).
  • Os comentários precisam ter, obrigatóriamente, coerência sobre o conteúdo que será comentado.
  • O membro que atingir 5 comentários invalidados não poderá mais comentar dentro do site. Com isso o membro não poderá mais ganhar pontos com comentários.
  • Há um limite de 10 comentários por dia para cada membro.
  • Qualquer comentário após ter sido publicado poderá ser retirado através da opção ( denunciar)

Comente

     (ainda não tem cadastro? clique aqui!)


Máximo de 30 caracteres

Máximo de 255 caracteres
 

R&W Consulting - Soluções Web Hospedagem UOL HOST PagSeguro - solução para pagamentos online
© 2006-2009 R&W Informática Ltda. - Todos os direitos reservados.