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

Datagrid


Beraldo

Pergunta

Script postado por: dmetallica

:: DataGrid ::

*Pessoal fiz uma classe que gerá uma datagrid, agora ficou muito mais facil e rápido de gerar uma tabela com paginação e ordenação!

*Atenção: Fiz esse código com PHP 5.0.1 e para Mysql 4.0

segue o código:

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
    *
    * 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.
    *
    * 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 = "")
   {

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

      /* 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 = 0;
      }
      else
      {
        $pagina_atual = $_GET['dtgdpagat'];
      }

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

      
      /* 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." >\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. */
     for($i=0;$i<$iTotPaginas;$i++)
     {
        $sHtmlBuffer .= "|<a href=\"".$_SERVER['PHP_SELF'].
                 "?dtgdpagat=".$i;
          if (isset($_GET['orddtgd']))
       $sHtmlBuffer .= "&orddtgd=".$_GET['orddtgd'];
          if (isset($_GET['ordaddtgd']))
     $sHtmlBuffer .= "&ordaddtgd=".$_GET['ordaddtgd'];
     
      $sHtmlBuffer .= " \" >".$i."</a>";
     }
     $sHtmlBuffer .= "|";
     
     /* Liberá a query da memoria do banco. */
     mysql_free_result($query);
     
     /* Mostra a DataGrid na tela */
     echo $sHtmlBuffer;
     
   }
   
   
}


?>
Teste Funcional teste.php
<?

include_once("HTML.php");

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

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

$rot            = array("Idade","Nome","Sexo");
$val            = array("idade","nome","sexo");
$orderbys   = array("idade","nome");

$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);

?>

:: 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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...