Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Anderson Mello

Repente III - Classe de Datagrid

Recommended Posts

Buenas, pessoal!

Sejam os repentistas supertelnet e _vina bem-vindos http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Vamos para nosso terceiro repente, onde o tema será o desenvolvimento de uma classe para gerar uma datagrid, informando apenas o nome da tabela no banco de dados. A grade gerada terá (opcionalmente) paginação dos dados embutida. A classe deverá ter métodos para também manipular os tipos de campos e formatá-los.

 

Por exemplo, um campo de data já poderá ser exibido no formato dd/mm/aa; um campo do tipo enum definido como "S, N" já poderá retornar, respectivamente, "Sim" e "Não"; um campo tipo float poderá ser formatado como moeda e assim por diante. Pensem nas possibilidades e nos tipos de campos e suas aplicações, para então criar os métodos necessários.

 

As regras são as mesmas: cada repentista terá o prazo de 24 horas para a postagem após a do adversário (a flexibilidade, como no caso de fim-de-semana, deve ser acordada e divulgada). Cada repentista trabalhará na sua própria linha de código e ambos decidem o que aproveitar um do outro para melhorarem seus códigos. Da mesma forma, o repentista poderá contestar o código postado pelo adversário e apontar erros. Neste caso, o repentista que for apontado deverá fazer as correções.

 

O primeiro a postar será o supertelnet, que sugeriu o tema :)

Boas trovas!

 

PS: o tópico do primeiro repente e do segundo repente encontram-se no subfórum de Duelos. ;)

 

Anderson Mello

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui no IM o nosso combustível nda mais que o amor mesmo, pq tempo, e outros luxos achoq ue ninguem dispoe.... sendo assim.... ai vai uma class so pra ter como ponta pe inicial.... podemos melhorar ela mto....

 

<?phpclass GradeDeDados {/*variaveis personalizadas, ouseja as que você vai determinar no uso da class*/  	var $legenda_array = array();	var $tipo_array = array();/*variaveis provadas, ouseja de uso somente da class, você nao consegue usa las fora da class*/	private $host="localhost";	private $user="root";	private $pass="";	private $bd="locadora";	private $tabelas = array();/*classe construtora*/	function GradeDeDados($sql=""){		settype($sql, 'string');/*pega o conteudo da variavel como sting*/		@mysql_connect ($this->host,$this->user,$this->pass) or die ("Não foi possível conectar-se ao Banco de Dados. Motivo: ".mysql_error());		@mysql_select_db ($this->bd);		/*conexao e selecao de bd*/				/*aqui vaz o array de tabelas do db para verificaçao posterior*/		$r=mysql_list_tables ($this->bd);		while ($tabela=mysql_fetch_array($r)){//			echo '<br />'.			$this->tabelas[].=$tabela[0];		}		//		if($this->v_t($sql)){		/*pela funcao v_t verifica se a tabela do banco em questao na class existe, caso nao printa o echo acima*/		$s = mysql_query($sql);			if($res = @mysql_fetch_object($s)){// se a query e true or false (aqui e boll )				$retorno = "";// set a var retorno				foreach($res as $k=>$v){					$row[$k]=$v;				}// faz o array $row com os valores vindos da var $res//				print_r($row);				$retorno .= "<table width=\"100%\" cellspacing=\"0\" id=\"tabela\">";				$retorno .= $this->GetTitulos($row);//usa a funçao gettitulos				$retorno .= $this->GetDados($row);//usa a funçao get dados				$retorno .= "</table>";				return $retorno;			}else{				return false;			}//		}else{return 'tabela inexistente';}	}	// verifica se a $tabela exite no array $this->tabela, se voltar false ai para tudo..rs, pequena mas eficiente	function v_t ($t) {		if(in_array($t,$this->tabelas)){			return true;		}	}	function GetTitulos($row){		$retorno = "<tr><th scope=\"col\"> </th>\n";		foreach($row as $campo => $valor){			$retorno .= "<th scope=\"col\">";			if(isset($this->legenda_array[$campo])){				$retorno .= $this->legenda_array[$campo];			}else{				$retorno .= $campo;			}			$retorno .= "</th>\n";		}		$retorno .= "</tr>";		return $retorno;	}	function GetDados($row){		$retorno = "";		$aux = 0;		$aux_cor = 0;		foreach($row as $valor){			if($aux_cor == 0){				$cor = "tabela_corsim";			}else{				$cor = "tabela_cornao";				$aux_cor = -1;			}			$aux_cor++;			$retorno .= "<tr class=\"" . $cor . "\">\n";			$retorno .= "<td><input name=\"chk_registro[" . $aux . "]\" type=\"checkbox\" id=\"chk_registro" . $aux . "\" value=\"checkbox\" /></td>";			foreach($row as $chave => $valor_campo){				$retorno .= "<td>";				if(isset($this->tipo_array[$chave])){					if($this->tipo_array[$chave] == "DATE"){						$retorno .= substr($valor_campo, 8, 2) . "/" . substr($valor_campo, 5, 2) . "/" . substr($valor_campo, 0, 4);					}else{						$retorno .= $valor_campo;					}				}else{					$retorno .= $valor_campo;				}				$retorno .= "</td>\n";			}			$retorno .= "</tr>";			$aux++;		}		return $retorno;	}	function Legenda($legenda){		$this->legenda_array = $legenda;	}	function Tipo($tipo){		$this->tipo_array = $tipo;	}}$datagrid = new GradeDeDados();//legenda troca os nomes dos campos da base pelo que desejar$legenda['nome'] = "Nome";$legenda['email'] = "E-Mail";$legenda['data_hora'] = "Data/Hora";$datagrid->Legenda($legenda);//tipo seta a forma que os dados vão retornar no datagrid, no caso só coloquei DATE, depois a gente vai adaptando conforme as necessidades...$tipo['data_hora'] = "DATE";$datagrid->Tipo($tipo);echo $datagrid->GradeDeDados("SELECT nome,email,data_hora FROM usuarios");?>
/*******************************************************/

editado: 1

_vina eu editei com alguns comentarios ai, te esclarece .... mas você pode mudar todo o construct dele se quiser...

/*********************************************************/

 

/*******************************************************/

editado: 2

_vina agora ta rodando... e so executar o arquivo com um banco de dados ai seu e mudar o nome de talelas e colunas relacionadas.

/*********************************************************/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa legal, começo!

 

assim que eu chegar no trabalho (9:00) eu vejo melhor o código.

Vamos que vamos supertelnet

 

+++Editado+++

 

Sexta-Feira estou com problemas na REDE aqui no trampo, o IIS + php5 naum quer funcionar.

Sites fora do AR.

posto melhorias hoje de noite.

já dei uma analisada no codigo já pensei em algumas coisas, mais preciso testalas.

hoje de noite faço tudo isso.

+++fim da edição+++

 

Abs ae t+s http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

A minha classe não gera absolutamente nada. Alterei para a minha db e nada.Onde altero o nome das tabelas?

splyft, a classe ainda está em desenvolvimento.Para utilizá-la, aguarde até que nossos repentistas a finalizem ;)

eu não consegui fazer a class exibir nada.heheheheheacho que tenho que ler mais sobre CLASSse alguem puder dar um HELP! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

_vina, suas dúvidas são relacionadas ao que o supertelnet postou?Você pode partir com sua própria classe, é só postar.Lembrando que precisamos manter o ritmo, estamos de olho nos prazos http://forum.imasters.com.br/public/style_emoticons/default/ninja.gif[]sAnderson Mello

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou documentar as minhas ediçoes com um novo post avisando q esta editado la em cima, se nao vai fica mto grande... falando nisso ja fiz uma nova ediçao , veja la!!! vamo q vamo!! rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.