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

Datagrid 2.0


Beraldo

Pergunta

Script postado por: dmetallica

:: DataGrid 2.0 ::

:: Pessoal eu dei uma aperfeiçoada na minha DataGrid, nesta nova versão temos:

>> Paginação de paginação semelhante ao google.

>> possiblidade de colocar CSS na tabela de paginação.

>> Submição de chaves cfme clique em linha. (DETALHE POR LINHA).

só lembrando que fiz isso com PHP 5.0 e MySQL 4.0

segue os novos fontes:

HTML.php

<?php

/*
 * Classe:         HTML
 * Finalidade:     Abstrair o acesso HTML como visualizações e montagem de componentes.
 * Design Pattern: ...
 * Data:           08/12/2005 00:05:00.000
 * Autor:          Diego Pacheco
 * Contato:        pacheco_programador@hotmail.com
 *
 */

class HTML
{

   private function __construct() {}      
   /********************************************************
    *
    * Metodo que Cria uma DataTable com:
    * >>> Cabeçalho
    * >>> Valores da Base
    * >>> Ordenação por cabeçãlho
    * >>> Paginação
    * >>> Paginação de Páginas, semelhante ao google.
    * >>> Clique na coluna e submeti com as chaves para a variavel determinada. (DETALHE POR CHAVE).
    *
    * PARRAMETROS:
    *
    *  > id_table  :: String contendo o nome da tabela, será atribuido ao id também.
    *  > class_css :: String [opcional] o nome da classe css que a tabela se adpta.
    *  > campos    :: array com todos os rotulos da tabela(TH).
    *  > valores   :: array com os valores, nome extatos da base que será listados.
    *  > orderbys  :: array [opcional] com os orders bys a serem executados com suas respectivas colunas.
    *  > sql       :: String sql a ser executada para montar a DataGrid.
    *  > cnn       :: Conexão ativa com a base de dados.
    *  > regs_pag  :: número total de registros por páginas, default 10.
    *  > sql_count :: sql com a agregate function count(), obrigatório para poder fazer a paginação.
    *  > table_cor :: [OPCINAL]Corringa que pode ter qualquer conteúdo: HTML,CSS,JS que será colocado no cab da tabela.
    *  > tr_cor    :: [OPCINAL]Corringa que pode ter qualquer conteúdo: HTML,CSS,JS que será colocado no TR da tabela.
    *  > css_pag   :: [OPCINAL] class CSS para a formatação da tag <p> na paginação.
    *  > tot_pag_pag :: [OPCINAL] número de paginas por paginas, ou sejá paginação de paginas. default 5.
    *  > $dados_chave_sbm :: [OPCIONAL] array com as chaves que ao usuário clicar na tabela serão submetidos.
    *  > $nome_var_chave_sbm :: [OPCIONAL] nome da variavel que será pega por $_GET[] ao submeter as chaves da tabela.
    *
    * OBS:
    *
    *  1. Os arrays "valores" e "campos" devem ter o mesmo tamanho.
    *  2. O array "orderbys" prescisa ter a mesma ordem dos arrays "valores" e "campos".
    *
    ********************************************************************************/

   static public function createDataGrid($id_table,$class_css = "",$campos,$valores,$orderbys = "",$sql,$cnn,$regs_pag = 10,$sql_count,$table_cor = "",$tr_cor = "",$css_pag = "",$tot_pag_pag = 5,$dados_chave_sbm = "",$nome_var_chave_sbm = "")
   {

      /* Pega o Total de Campos e Valores. */
      $iTotCampos   = count($campos);
      $iTotValores  = count($valores);
      $iTotOrderBys = ( ( $orderbys == "" ) ? 0 : count($orderbys) );
      $iTotchaves   = ( ( $dados_chave_sbm == "" ) ? 0 : count($dados_chave_sbm) );

      /* Executa o SQL Count e descobe quantos registros tem. */
      $query_count   = mysql_query($sql_count,$cnn);
      $array_count   = mysql_fetch_array($query_count);
      $iTotRegistros = $array_count[0];

      /* Pega o Total de Paginas */
      $iTotPaginas = ceil($iTotRegistros/$regs_pag);


      /* Remanejá a pagina Atual. */
      if (!isset($_GET['dtgdpagat']))
      {
        $pagina_atual = 1;
      }
      else
      {
        $pagina_atual = $_GET['dtgdpagat'];
      }

      /* Pega o Fator Registro/Pagina */
      $fator = ($regs_pag*($pagina_atual-1));
      

      /* Pega a paginação da paginação Atual. */
      $pag_pag_atual = 0;
      if (isset($_GET['dtgdpgpgat']))
      {
  $pag_pag_atual = $_GET['dtgdpgpgat'];
      }

      
      /* Monta o Cabeçalho da Tabela. */
      $sHtmlBuffer  = "<TABLE name=\"$id_table\" id=\"$id_table\" $table_cor class=\"$class_css\" >\n";
      
      /* Remanejá a ordenação da tabela para ASC e DESC conforme o click! */
      $tipo_ord = "ASC";
      if (isset($_GET['ordaddtgd']))
      {
  $tipo_ord = $_GET['ordaddtgd'];
  if ($_GET['ordaddtgd']=="ASC")
           $tipo_ord = "DESC";
  else
           $tipo_ord = "ASC";
      }

      /* Monta os Rotulos da Tabela. */
      $sHtmlBuffer .= "<TR>\n";
      for($i=0;$i<$iTotCampos;$i++)
      {
  if ( ($iTotOrderBys!=0) && ($valores[$i]==@$orderbys[$i]) )
            $sHtmlBuffer .= "<TH onClick=\"window.location.href = '".$_SERVER['PHP_SELF']."?orddtgd=$orderbys[$i]&ordaddtgd=$tipo_ord'\" style=\"CURSOR: HAND;\"  >".$campos[$i]."</TH>\n";
   else
            $sHtmlBuffer .= "<TH>".$campos[$i]."</TH>\n";
      }
      $sHtmlBuffer .= "</TR>\n";


      /* Verifica se foi solicitada uma ordenação caso for aplica ao sql. */
      if (isset($_GET['orddtgd']))
      {
  $sql .= " ORDER BY ".$_GET['orddtgd']." ".$_GET['ordaddtgd'];
      }
      
      /* Monta a Clausula SQL já Paginada! */
      $sql .= " LIMIT ".$fator.",".$regs_pag;


      /* Excecuta o SQL. */
      $query = mysql_query($sql,$cnn);
      
      /* Percore todos os resultados. */
      $count = 0;
      while (($array = mysql_fetch_array($query))!=null)
      {
          /* Monta os Valores da Tabela. */
          $sHtmlBuffer  .= "<TR id=\"tr".$id_table."".$count."\" ".$tr_cor;
          $sBufferChaves = "";
          
   /* Verifica se foi passada alguma chave. */
   if ($iTotchaves!=0)
          {
       /* Percoré todas as chaves da tabela. */
       for($j=0;$j<$iTotchaves;$j++)
       {
             $sBufferChaves .= $array[$dados_chave_sbm[$j]].";";
       }
          }
          
          /* Monta Js do detahle da tabela. */
          if ($sBufferChaves!="")
          {
             $sHtmlBuffer .= " onClick=\" window.location.href = '".$_SERVER['PHP_SELF'].
                      "?".$nome_var_chave_sbm."=".$sBufferChaves."'; \" Style=\"CURSOR: HAND;\" ";
          }
          $sHtmlBuffer .= " >\n";
          
          for($i=0;$i<$iTotValores;$i++)
          {
             $sHtmlBuffer .= "<TD>";
      if ($array[$valores[$i]]=="")
      {
                $sHtmlBuffer .= " ";
      }
      else
      {
                $sHtmlBuffer .= $array[$valores[$i]];
             }
      $sHtmlBuffer .= "</TD>\n";
          }
          $sHtmlBuffer .= "</TR>\n";
          $count++;
     }

     /* Fecha a tabela */
     $sHtmlBuffer .= "</TABLE>\n";
     

     /* Mostra a Lista de Páginas. */
     $sHtmlBuffer .= "<TABLE id=\"tbPag$id_table\" name=\"tbPag$id_table\" >";
     $sHtmlBuffer .= "<TR>";
     $sHtmlBuffer .= "<TD><p class=\"$css_pag\" >";
     
     /* Mostra paginação somente no caso de ter duas paginas. */
     if ($iTotPaginas>1)
     {

       /* Determina a pagina atual da paginação de paginas. */
       $count  = 0;
       if ($pag_pag_atual==0)
  $i = 1;
       else
  $i = $pag_pag_atual;


        /* Mostra o rotulo/link para primeira pagina */
        if ($pagina_atual==1)
        {
            $sHtmlBuffer .= " [1ª]";
        }
        else
        {
            $sHtmlBuffer .= "[<a href=\"".$_SERVER['PHP_SELF'].
                   "?dtgdpagat=1";
                   if (isset($_GET['orddtgd']))
           $sHtmlBuffer .= "&orddtgd=".$_GET['orddtgd'];
            if (isset($_GET['ordaddtgd']))
         $sHtmlBuffer .= "&ordaddtgd=".$_GET['ordaddtgd'];

      $sHtmlBuffer .= " \" >1ª</a>]";
       }
       
       /*Monta o Paginador de paginas para traz. */
       if ( ($pag_pag_atual-1!="") && (($pag_pag_atual-1)>0))
       {
    $ant_pag = ($pag_pag_atual-$tot_pag_pag);
           $sHtmlBuffer .=  " - <a href=\"".$_SERVER['PHP_SELF'].
                            "?dtgdpagat=".($ant_pag+($tot_pag_pag-1))."&dtgdpgpgat=".$ant_pag."";
                           if (isset($_GET['orddtgd']))
                          $sHtmlBuffer .= "&orddtgd=".$_GET['orddtgd'];
              if (isset($_GET['ordaddtgd']))
                  $sHtmlBuffer .= "&ordaddtgd=".$_GET['ordaddtgd'];

                $sHtmlBuffer .= " \" > << </a>";
       }

       /* Monta o link para todas as outras paginas! */
       for(;$i<$iTotPaginas+1;$i++)
       {
    if ($tot_pag_pag==$count) break;
    
           if ($pagina_atual==$i)
      {
       $sHtmlBuffer .= " - ".$i;
    }
    else
    {
        $sHtmlBuffer .= " - <a href=\"".$_SERVER['PHP_SELF'].
                      "?dtgdpagat=".$i."&dtgdpgpgat=".$pag_pag_atual."";
                if (isset($_GET['orddtgd']))
            $sHtmlBuffer .= "&orddtgd=".$_GET['orddtgd'];
               if (isset($_GET['ordaddtgd']))
          $sHtmlBuffer .= "&ordaddtgd=".$_GET['ordaddtgd'];
     
        $sHtmlBuffer .= " \" >".$i."</a>";
          }
   $count++;
       }
       

       /*Monta o Paginador de paginas para frente */
       if (($pag_pag_atual+$tot_pag_pag-1)!=$iTotPaginas)
       {
    $prox_pag = ($pag_pag_atual+($i-$pag_pag_atual));
           $sHtmlBuffer .=  " - <a href=\"".$_SERVER['PHP_SELF'].
                            "?dtgdpagat=".$prox_pag."&dtgdpgpgat=".$prox_pag."";
                           if (isset($_GET['orddtgd']))
                          $sHtmlBuffer .= "&orddtgd=".$_GET['orddtgd'];
              if (isset($_GET['ordaddtgd']))
                  $sHtmlBuffer .= "&ordaddtgd=".$_GET['ordaddtgd'];

                $sHtmlBuffer .= " \" > >> </a>";
       }

     
       /* Montagem do link de ultima pagina para a paginação. */
       if ($pagina_atual==$iTotPaginas)
       {
           $sHtmlBuffer .= " [ultima]";
       }
       else
       {   
          $prox_pag = ($iTotPaginas-$tot_pag_pag+1);
          $sHtmlBuffer .= " [<a href=\"".$_SERVER['PHP_SELF'].
                        "?dtgdpagat=".$iTotPaginas."&dtgdpgpgat=".$prox_pag."";
                       if (isset($_GET['orddtgd']))
                   $sHtmlBuffer .= "&orddtgd=".$_GET['orddtgd'];
          if (isset($_GET['ordaddtgd']))
              $sHtmlBuffer .= "&ordaddtgd=".$_GET['ordaddtgd'];

            $sHtmlBuffer .= " \" >ultima</a>]";
       }

       /* Fecha a Tabela de Paginação */
       $sHtmlBuffer .= "</p></TD>";
       $sHtmlBuffer .= "</TR>";
       $sHtmlBuffer .= "</TABLE>";
     
     }
     
     /* Liberá a query da memoria do banco. */
     mysql_free_result($query);
     
     /* Mostra a DataGrid na tela */
     echo $sHtmlBuffer;
     
   }
}

?>
Teste Funcional. teste.php
<style>
.pag
{
    COLOR: darkblue;
    BACKGROUND-COLOR: gainsboro;
}
</style>
<?php

include_once("HTML.php");

$cnn          =  mysql_connect("localhost","root","");
mysql_select_db("banco",$cnn);

$sql           = "Select * from encontros";
$sql_count  = "Select count(*) from encontros";

$rot           = array("Data","Descrição","Inicio");
$val           = array("data","descricao","inicio");
$orderbys  = array("data","descricao");
$chaves     = array("cod","data");

$tablela_cor = "cellSpacing=\"1\" cellPadding=\"1\" width=\"100%\" border=\"3\" bordercolor=\"steelblue\"";
$tr_cor      = "";

HTML::createDataGrid ("dtgdDados", "", $rot, $val, $orderbys, $sql,$cnn, 5,$sql_count, $tablela_cor, $tr_cor,"pag",5, $chaves, "testeChaves");

if (isset($_GET['testeChaves']))
  echo "Chaves vindas como: [testeChaves]= ".$_GET['testeChaves'];

?>
</BODY>

:: E eras isso, até a prox. :: B)

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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...