Jump to content
Fórum Script Brasil
  • 0

Class - dPagination 2.2


david.lyonnais

Question

@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é

Edited by david.lyonnais
Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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

Edited by david.lyonnais
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      651.8k
×
×
  • Create New...