Ir para conteúdo
Fórum Script Brasil
  • 0

Class - dPagination 2.2


david.lyonnais

Pergunta

@EDIT2-----------------------

Esqueci da função ceil() pra arrendondar para saber o numero máximo de paginas

@EDIT-------------------------

A versão 2.1 vem com mais uma função,pagination(), que é basicamente a fusão das dPagina,rPagina e qPagina.

-Você pode tanto usar ela ou usar as outras 3.

-Ela recebe os seguintes parametros pagination($sql,$registro_pagina,$pagina_atual,$variavel_pagina) e retorna a resposta do mysql_query().

Ex.:

<?php
 include ('dpagination.php');
  $pag = new dPagination();
  if(!isset($_GET['pg'])){
    $pagina = 1;
  }else{
    $pagina = $_GET['pg'];
  }
  $res = $pag->pagination('SELECT * FROM produtos',2,$pagina,'pg');
?>
-Adicionei mais um tipo de passar as paginas tem como default o estilo(Anterior | Proximo), adicionei o estilo(1-2-3-4-5-6-7) onde mostra as proximas pagina e a margem é passada por parametro e tem como default margem de 3 paginas. -Para escolher o primeiro tipo você pode passar nada por parametro ou passar 0 ex.: $paginas = $pag->linkPaginas() ou $paginas = $pag->linkPaginas(0) -Para escolher o segundo tipo você pode fazer de duas maneiras, passando 1 no primeiro parametro e usando margem default ou passar 1 e a margem. ex.: $paginas = $pag->linkPaginas(1); ou $paginas = $pag->linkPaginas(1,4); ---------------------------- Opa, venho agora trazer uma classe que facilita a paginação de dados. Dados Nome: dPagination 2.2 Autor: David Guilherme Data: 11/01/2011 dpagination.php
<?php
  //---------------------------------
  //Classe: dPagination 2.2
  //Autor: David Guilherme
  //Data:11/01/2011
  //----------------------------------
  
  class dPagination{
    //Propiedades
    private $antPagina;
    private $proxPagina;
    private $pagina;
    private $regPagina;
    private $rowQuery;
    private $varPagina;
    public $numReg;
    
    function pagination($sql = 0,$registro_pagina = 0,$pagina_atual = 0,$variavelPagina = 0){
      if($pagina_atual != 0 and is_string($variavelPagina)){
        $this->dPagina($pagina_atual,$variavelPagina);
      }else{
        echo "Erro 001: Falta do 3 ou 4 paramêtro.";
        exit;
      }
      if($registro_pagina > 0){
        $this->rPagina($registro_pagina); 
      }else{
        echo "Erro 002: Falta do 2 paramêtro.";
        exit;
      }
      if(is_string($sql)){
        $res = $this->qPagina($sql);
      }else{
        echo "Erro 003: Falta do 1 paramêtro.";
        exit;
      }
      return $res;
    }
    
    function dPagina($pagina_atual,$variavelPagina){
      $this->pagina = $pagina_atual;
      $this->varPagina = $variavelPagina;
    }
    
    function rPagina($registro_pagina){
      $this->regPagina = $registro_pagina;
    }
    
    function qPagina($sql){
      $minlimit = $this->regPagina * ($this->pagina - 1);
      $maxlimit = $this->regPagina;
      $sql2 = $sql." Limit ".$minlimit.",".$maxlimit;
      $res = mysql_query($sql);
      $this->rowQuery = mysql_num_rows($res);
      $res2 = mysql_query($sql2);
      $this->numReg = mysql_num_rows($res2);
      if($this->pagina > 1){
        $pg = $this->pagina - 1;
        $this->antPagina = "?".$this->varPagina."=".$pg;
      }else{
        $this->antPagina = 0;
      }
      $limit = $maxlimit + $minlimit;
      if($this->rowQuery > $limit){
        $pg = $this->pagina + 1;
        $this->dpsPagina = "?".$this->varPagina."=".$pg;
      }else{
        $this->dpsPagina = 0;
      } 
      return $res2;
    }
    
    function linkPaginas($tipo = 0,$margem = 3){
      $pagina = $_SERVER['PHP_SELF'];
      if($tipo == 0){  
      if(!is_string($this->antPagina)){
        $url[0] = "<span style='color: #333333;'>Anterior</span>";
      }else{
        $url[0] = "<a href='".$pagina.$this->antPagina."'>Anterior</a>";
      }
      if(!is_string($this->dpsPagina)){
        $url[1] = "<span style='color: #333333;'>Próxima</span>";
      }else{
        $url[1] = "<a href='".$pagina.$this->dpsPagina."'>Próxima</a>";
      }
      }
      if($tipo == 1){
          $maxpag = ceil($this->rowQuery / $this->regPagina);
          $i = 0;
          $j = $margem;
                  $z = ($margem * 2) + 1;
        while($i < $z){
          if($j > 0){
           $r = $this->pagina - $j;
           $verif = 0;
          }elseif($j < 0){
            $r = -1;
           $u = $this->pagina + ($j * (-1));
          }else{
            $r = -1;
            $url[$i] = "<span style='color: #333333;'>".$this->pagina."</span>";
            $i++;
          }
        if( $r > 0 ){
          $url[$i] = "<a href='".$pagina."?".$this->varPagina."=".$r."'>".$r."</a>";
          $i++;
        }
        if($u <= $maxpag and $r < 0 and isset($u) ){
          $url[$i] = "<a href='".$pagina."?".$this->varPagina."=".$u."'>".$u."</a>";
          $i++;
        }
        if($u > $maxpag ){
          break;
        }
        $j--;
        }
      }
      return $url;
    }
  }
?>
Tutorial de uso: Metodo: -dPagina($pagina_atual,$variavelPagina);Primeiro paramêtro é a pagina atual ,o segundo é o nome da variavel que é passada via get Função: Ele serve pra você informa a classe a pagina atual, ou seja, o numero que estiver na variavel passada por get. Exemplo:
<?php
  include ('conexao.php');
  include ('davvpagination.php');
  $pag = new dPagination();
  if(!isset($_GET['pg'])){
    $pagina = 1;
  }else{
    $pagina = $_GET['pg'];
  }
  $pag->dPagina($pagina,'pg');
?>
Metodo: -rPagina($resgistro_pagina);Você informa quantos registros vai ter por página. Função: Informa a classe quantos registros seram exibido por página. Exemplo:
<?php
   include ('conexao.php');
  include ('dpagination.php');
  $pag = new dPagination();
  if(!isset($_GET['pg'])){
    $pagina = 1;
  }else{
    $pagina = $_GET['pg'];
  }
  $pag->dPagina($pagina,'pg');
  $pag->rPagina(10);    
?>
Metodo: -qPagina($sql);Aqui você passara o codigo sql para a consulta. Função: Fazer a consulta no banco de dados e retorna a variavel de resposta do mysql_query(). OBS.:Não presisa colocar a cláusula limit pois a propia classe se encarrega de colocar. Exemplo:
<?php
  include ('conexao.php');
  include ('dpagination.php');
  $pag = new dPagination();
  if(!isset($_GET['pg'])){
    $pagina = 1;
  }else{
    $pagina = $_GET['pg'];
  }
  $pag->dPagina($pagina,'pg');
  $pag->rPagina(10);
  $res = $pag->qPagina('SELECT * FROM usuarios');
  echo "<table border='1'>";
  while($dados = mysql_fetch_array($res)){
    echo "<tr>";
    echo "<td>".$dados['id']."</td>";
    echo "<td>".$dados['login']."</td>";
    echo "<td>".$dados['senha']."</td>";
    echo "<td>".$dados['email']."</td>";
    echo "</tr>";
  }
  echo "</table>";
?>
Metodo: -linkPaginas(); Função: Tipo 1: Montar os links anterior e proxima, retornando um array com chave [0] para anterior e chave [1] para proxima. Tipo 2: Basta usar foreach no array com os links. Exemplo Tipo 1:
<?php
  include ('conexao.php');
  include ('dpagination.php');
  $pag = new dPagination();
  if(!isset($_GET['pg'])){
    $pagina = 1;
  }else{
    $pagina = $_GET['pg'];
  }
  $res = $pag->pagination('SELECT * FROM usuarios',10,$pagina,'pg');
  $paginas = $pag->linkPaginas();
  echo $paginas[0]."|".$paginas[1];
  echo "<table border='1'>";
  while($dados = mysql_fetch_array($res)){
    echo "<tr>";
    echo "<td>".$dados['id']."</td>";
    echo "<td>".$dados['login']."</td>";
    echo "<td>".$dados['senha']."</td>";
    echo "<td>".$dados['email']."</td>";
    echo "</tr>";
  }
  echo "</table>";
  echo $paginas[0]."|".$paginas[1];
?>
Exemplo Tipo 2:
<?php
  include ('pagination.php');
  $pag = new dPagination();
  if(!isset($_GET['pg'])){
    $pagina = 1;
  }else{
    $pagina = $_GET['pg'];
  }
  $res = $pag->pagination('SELECT * FROM usuarios',10,$pagina,'pg');
  $paginas = $pag->linkPaginas(1,5);
  echo "<table>";
  while($dados = mysql_fetch_array($res)){
    echo "<tr>";
    echo "<td>".$dados['id']."</td>";
    echo "<td>".$dados['login']."</td>";
    echo "<td>".$dados['senha']."</td>";
    echo "<td>".$dados['email']."</td>";
    echo "</tr>";
  }
  echo "</table>";
  foreach($paginas as $key => $valor){
     if($key == (count($paginas) - 1)){
       echo $valor;
     }else{
       echo $valor.'|';
     }
  }
?>

Simplifica e muito o trabalho de paginação, exibir dados com paginas fico mais fácil com essa classe.

Qualquer dúvida é so postar ai.

Comentem..

Até

Editado por david.lyonnais
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

cara, eu estou usando um pagination, mas ele é muito ruim, e mostra o que não devia, como ele está incrementado com o resto do meu sistema, eu queria que você me explicasse como faz, bem detalhado(se possível) e que facilite para eu colocar num sistema já pronto.

eu uso um arquivo(funçoes.php) que tem a função do pagination, e nas páginas php eu coloco o numero de linhas que eu quero e depois para mostrar as páginas (<< 1 2 >>) eu vou e ponho pagination();

Link para o comentário
Compartilhar em outros sites

  • 0

Posta como você esta fazendo , posta o codigo.

Você pode ter entendi o funcionamento dela erradamente so isso mais ela esta funcionando tudo certo.

Siga o esquema.

//Parte que faz a conexao ao banco de dados
include("dpagination.php");
$pag = new dPagination();
if(!isset($_GET['pg'])){
    $pagina_atual = 1;
  }else{
    $pagina_atual = $_GET['pg'];
  }
$reg =  10; //Registro por pagina
$sql = "SELECT * FROM tabela"; //Nota: Não presisa colocar o limit, a classe se encarregara.
  $res = $pag->pagination($sql,$reg,$pagina_atual,'pg');//AQUI FAZ A MAGIA, e retorna o resultado do mysql_query
  $paginas = $pag->linkPaginas(1,5);//Aqui você escolhe o tipo de exibiçao das paginas 1 ou 0 ( 0 = Anterior | Proxima e 1 =  123[4]567 a pagina atual fica no meio, se você escolher 1 tem que coloca o segundo parametro onde voce escolhe a margem ou seja se for dois é 12[3]45  se for 3 é 123[4]567 e assim vai.)

  //AQUI VOCE EXIBI OS DADOS com mysql_fetch_array () ou mysql_fecth_object() LEMBRANDO a variavel de resposta do mysql_query é a mesa do pagination

//Para mostrar as paginas so seguir a ultima parte do tutorial

Editado por david.lyonnais
Link para o comentário
Compartilhar em outros sites

  • 0

olha o meu mcódigo, e tenta me explicar como seria o certo para edita-lo:

$sql = "SELECT * FROM `posts` WHERE id_topic=".id_topic." AND id_forum=".id_forum." AORDER BY `post` ASC""; 
    $result = mysql_query($sql)
    or die("Falha na execução da consulta");

    $c = 2;
    $numbers = array("1","2");
    while ($row = mysql_fetch_array($result))
    {
    $title_htmlspecialchars = htmlspecialchars ($row["title"]);
    $title = nl2br($title_htmlspecialchars);
    $text_htmlspecialchars = htmlspecialchars ($row["text"]);
    $text = nl2br($text_htmlspecialchars);
    
    $table_topics = 'texto aqui';
        else
        {}
    $table_topics .= '</div></td></tr>';
    echo $table_topics;
    }
pagination(); //-> função que eu uso para mostrar o número de páginas q tem e os links.

Link para o comentário
Compartilhar em outros sites

  • 0

Realmente você não entendeu o tutorial depois eu edito ele todo para deixar bem mais explicativo.

Não é o pagination() que mostra os links você nem sequer instancio a class dPagination segue o seu codigo modificado da maneira correta, e sugiro que você coloque a class em um arquivo isolado com o nome de dpagination.php.

//AQUI você coloca o include do arquivo que se encontra a class
$pag = new dPagination();
if(!isset($_GET['pg'])){
    $pagina_atual = 1;
  }else{
    $pagina_atual = $_GET['pg'];
  }
//Configurações
$sql = "SELECT * FROM `posts` WHERE id_topic=".id_topic." AND id_forum=".id_forum." AORDER BY `post` ASC"";//CODIGO SQL
$reg = 10;//Numero de registro por pagina
$result = $pag->pagination($sql,$reg,$pagina_atual,'pg');//Aqui faz a magia.
$paginas = $pag->linkPaginas(0);//Aqui passa os links das paginas para um array.
    $c = 2;
    $numbers = array("1","2");
    while ($row = mysql_fetch_array($result))
    {
    $title_htmlspecialchars = htmlspecialchars ($row["title"]);
    $title = nl2br($title_htmlspecialchars);
    $text_htmlspecialchars = htmlspecialchars ($row["text"]);
    $text = nl2br($text_htmlspecialchars);
    
    $table_topics = 'texto aqui';
    $table_topics .= '</div></td></tr>';
    echo $table_topics;
    }
echo $paginas[0]." | ".$paginas[1];//AQUI QUE MOSTRA AS PAGINA QUE NO CASO É ANTERIOR e PROXIMA.

Link para o comentário
Compartilhar em outros sites

  • 0

o problema é que está numa fução isso, assim:

function list_topics() 
{
    $sql = "SELECT * FROM `posts` WHERE id_topic=".id_topic." AND id_forum=".id_forum." AORDER BY `post` ASC""; 
    $result = mysql_query($sql)
    or die("Falha na execução da consulta");

    $c = 2;
    $numbers = array("1","2");
    while ($row = mysql_fetch_array($result))
    {
    $title_htmlspecialchars = htmlspecialchars ($row["title"]);
    $title = nl2br($title_htmlspecialchars);
    $text_htmlspecialchars = htmlspecialchars ($row["text"]);
    $text = nl2br($text_htmlspecialchars);
    
    $table_topics = 'texto aqui';
        else
        {}
    $table_topics .= '</div></td></tr>';
    echo $table_topics;
    }
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...