*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;
}
}
?>
Pergunta
Beraldo
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
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.