Abaixo o Código da classe, todo comentado. Por ser um pouco extensa não vou me prolongar.
Logo após a classe, segue um exemplo bem simples de como utiliza-la.
Arquivo: gen.form.class.php
<?php /**
* Classe para criaçao de formulários
* @author Otavio Theiss - iperfly@gmail.com
* @copyright 10 de Outubro de 2007
* @package Class.Form
* @version 1.0
*/
class GEN_FORM{
/*******************
FORMULÁRIO
*******************/
/**
* Define o NOME do formulario ( default = "frm")
*
* @var string $frmName
*/ var $frmName = "frm";
/**
* Define a Ação do formulário ( default = " ")
*
* @var string $frmAction
*/ var $frmAction = "";
/**
* Define o Metodo de envio do formulário
* (post ou get) ( default = "post")*
* @var string $frmMethod
*/
var $frmMethod = "post";
/**
* Define comandos javascript caso for usado onSubmit()
*
* @var string $frmEvento
*/
var $frmEvento = "";
/**
* Define a ID do formulário ( default = "frm")
*
* @var string $frmId
*/ var $frmId = "frm";
/**
* Desine o Enctype do formulário
* ( default = "multipart/form-data")
*
* @var string $frmEnctype
*/ var $frmEnctype = "multipart/form-data";
/*******************
CSS
*******************/
/**
* Defina a classe do css
*
* @var string $cssClass
*/
var $cssClass;
/**
* Define o estilo com css
*
* @var string $cssStyle
*/
var $cssStyle;
/*******************
Campos
*******************/
/**
* Define o Nome do Campo
*
* @var string $fldName
*/
var $fldName;
/**
* Define a ID do Campo
*
* @var string $fldId
*/
var $fldId;
/**
* Define o tipo de campo que será utilizado * Normais
* (text, hidden, checkbox, radio, file, image) *
* Especiais (select, textarea) * Botões (reset, submit, button)
*
* @var string $fldType
*/
var $fldType;
/**
* Bloqueia o campo " disabled " ( Default = 0)
*
* @var int
*/ var $fldDisabled = 0;
/**
* Seta o campo como ReadOnly ( Default = 0 )
*
* @var bool
*/
var $fldReadOnly = 0;
/**
* Define o option do select(ComboBox)
* como selected ( Default = 0)
*
* @var int
*/
var $fldSelected = 0;
/**
* Define o CheckBox como checked ( Default = 0)
*
* @var int
*/
var $fldChecked = 0;
/**
* Define o Máximo de caracteres do campo (se não setado unlimited )
*
* @var int
*/
var $fldMaxLength;
/**
* Define o valor inicial do campo ( Default = " ")
*
* @var mixed
*/ var $fldValue = "";
/**
* Define os valores do option do $fldSelect ( Default = array() )
*
* @var array
*/
var $fldOptions = array();
/**
* Define a imagem caso o $fldType for " image " ( Default = " ")
*
* @var string
*/ var $fldSrc = "";
/**
* Atribui um evento de javascript ao Campo ( Default = " " )
*
* @var mixed $fldEvento
*/ var $fldEvento = "";
/**
* Seta a tag ALT do campo ( Default = "")
*
* @var String $fldAlt
*/ var $fldAlt = "";
/**
* Seta a TAG title do campo ( Default = "" )
*
* @var string $fldTitle
*/ var $fldTitle = "";
/*************************
SET
*************************/
/**
* Abre o Formulario utilizando as variaveis $frmAction, $frmMethod,
* $frmEnctype, $frmName, $frmId, $frmTarget
*
* @return mixed (Codigo HTML que começa um Form)
*/
function setOpenForm(){
print "<form action=\"$this->frmAction\" method=\"$this->frmMethod\" enctype=\"$this->frmEnctype\" name=\"$this->frmName\" id=\"$this->frmId\" $this->frmEvento>";
}
/**
* Fecha o formulário
*
* @return mixed (Codigo HTML que fecha o Form)
*/
function setCloseForm(){
print "</form>";
}
/**
* Vrifica qual é o tipo do campo a ser gerado
*
* @return mixed (HTML code)
*/
function getField(){
switch (strtolower($this->fldType)){
case "text":
print $this->setFldNormal();
break;
case "hidden":
print $this->setFldNormal();
break;
case "checkbox":
print $this->setFldNormal();
break;
case "radio":
print $this->setFldNormal();
break;
case "image":
print $this->setFldNormal();
break;
case "file":
print $this->setFldNormal();
break;
case "reset":
print $this->setFldNormal();
break;
case "submit":
print $this->setFldNormal();
break;
case "button":
print $this->setFldNormal();
break;
case "password":
print $this->setFldNormal();
break;
case "select":
print $this->setFldSelect();
break;
case "textarea":
print $this->setFldtextArea();
break;
}
/*reseta as variaveis*/
$this->doClear();
}
/**
* Seta o campo como Disabled
*
* @return string
*/
function setDisabled(){
switch ($this->fldDisabled){
case 1 :
return " disabled=\"disabled\" ";
break;
default: return "";
}
}
/**
* Seta o campo como Checked
*
* @return string
*/
function setChecked(){
switch ($this->fldChecked){
case 1 :
return " checked=\"checked\" ";
break;
}
}
/**
* Seta o campo como Checked
*
* @return string
*/
function setSelected(){
switch ($this->fldSelected){
case 1 :
return " selected=\"selected\" ";
break;
}
}
/**
* Seta o campo com readonly
*
* @return mixed (HTML TAG CODE)
*/
function setReadOnly(){
switch ($this->fldReadOnly){
case 1 :
return " readonly ";
break;
default: return "";
}
}
/**
* Gera o campo do form tipo Normal (text, hidden, checkbox, radio...)
*
* @return mixed $input ( "Código html do campo" )
*/ function setFldNormal(){
input = "<input name=\"$this->fldName\" id=\"$this->fldId\" type=\"$this->fldType\" src=\"$this->fldSrc\" ".$this->setDisabled() . $this->setChecked ." value=\"$this->fldValue\" maxlength=\"$this->fldMaxLength\" " . $this->setReadOnly() . "alt=\"$this->fldAlt\" title=\"$this->fldTitle\" style=\"$this->cssStyle\" class=\"$this->cssClass\" $this->fldEvento />";
return $input;
}
/**
* Gera o campo do form tipo Select
*
* @return mixed ( print "Código html do campo")
*/ function setFldSelect(){
$tag = "<select name=\"$this->fldName\" id=\"$this->fldId\" style=\"$this->cssStyle\" class=\"$this->cssClass\" $this->fldEvento >";
$tag .= $this->setFldSelectOption();
$tag .= "</select>";
}
/**
* Gera os options do campo select (ComboBox)
*
* @return mixed $op ( print "Código html do campo")
*/ function setFldSelectOption(){
foreach($this->fldOptions as $Key => $Value) {
$v1 = $key;
$v2 = $value;
if ($v2<>''){
$op .= "<option value=\"$v1\" $this->setSelected()>".$v2."</option>";
}
}
return $op;
}
/**
* Gera o campo de textarea
*
* @return mixed ( HTML TAG CODE )
*/
function setFldTextArea(){
$Field .= "<textarea name=\"$this->fldName\" id=\"$this->fldId\" class=\"$this->cssClass\" style=\"$this->cssStyle\" title=\"$this->fldTitle\"" . $this->setReadOnly() ." ". $this->setDisabled() . " $this->fldEvento >";
$Field .= $this->fldValue;
$Field .= "</textarea>";
return $Field;
}
/**
* Limpa todas as Variaveis da Classe
*
* @return void
*
*/
function doClear(){
$this->frmName = "frm";
$this->frmAction = "";
$this->frmMethod = "post";
$this->frmEvento = "";
$this->frmId = "frm";
$this->frmEnctype = "multipart/form-data";
$this->cssClass = "";
$this->cssStyle = "";
$this->fldName = "";
$this->fldId = "";
$this->fldType = "";
$this->fldDisabled = 0;
$this->fldReadOnly = 0;
$this->fldSelected = 0;
$this->fldChecked = 0;
$this->fldMaxLength = "";
$this->fldValue = "";
$this->fldOptions = array();
$this->fldSrc = "";
$this->fldEvento = "";
$this->fldAlt = "";
$this->fldTitle = "";
}
}
?>
Arquivo: exemplo.php
<?
require("gen.form.class.php");
$a = new GEN_FORM();
$a->setOpenForm();
echo "\n<br>";
$a->fldName = "teste";
$a->fldId = "teste";
$a->fldType = "textarea";
$a->cssStyle ="color:red;";
$a->fldValue= "foi";
$a->getField();
echo "\n<br>";
$a->fldName = "teste1";
$a->fldId = "teste1";
$a->fldType = "text";
$a->cssStyle ="color:blue;";
$a->fldValue= "foi2";
$a->fldReadOnly = 0;
$a->fldDisabled = 0;
$a->getField();
echo "\n<br>";
$a->fldName = "teste3";
$a->fldId = "teste3";
$a->fldType = "password";
$a->cssStyle ="color:#ccc;";
$a->fldValue= "foi";
$a->fldReadOnly = 0;
$a->getField();
echo "\n<br>";
$a->fldName = "teste4";
$a->fldId = "teste4";
$a->fldType = "textarea";
$a->cssStyle ="color:red;";
$a->cssClass = "class123";
$a->fldValue= "foi";
$a->getField();
echo "\n<br>";
$a->fldName = "btn";
$a->fldId = "btn";
$a->fldType = "submit";
$a->cssStyle ="color:red;";
$a->fldValue= "manda";
$a->getField();
echo "\n<br>";
echo "\n\n";
$a->setCloseForm();
?>

9 comentários:
obrigado cara.. o codigo que gera eh limpo e funcional..
na linha 307 do gen.form.class.php falta um "$" antes do "input"
;)
Opa vou corrigir, em breve estarei publicando uma nova classe com validação em js e mais algumas coisas.
Abraço.
Otavio, meus parabéns!
Fiz alguma alterações para incluir labels e quebras de linha, fica a sugestão!
Uma coisa interessante seria o uso do Smarty, fiz alguns testes retirando o "print" mas não ainda não tive sucesso.
Abraço
Opa blz.
Quanto a smaty não gosto de trabalhar com smarty. mais estou sempre aberto a sugestões.
Até sábado vou publicar a versão 2.0 da classe, o unico problema é que quem estava utilizando essa vai ter que mudar bastante coisa no código.
Apenas completando a versão nova vai ter validação automatica dos campos do form e vai ser bem flexível.
Obrigado a todos por deixarem idéias.
Abraços
Obrigado po responder Otávio, no caso você cita que não gosta do Smarty, mas você alguma classe para templates. Você usa MVC?
Abraço.
Bem na verdade não utilizo classes de template, pois costumo desenvolver aplicações distintas para cada cliente.
A muito tempo atraz até tentei utilizar smaty porem não me adaptei e deixei de lado...
qualquer coisa add meu msn iperfly@gmail.com
Abraço
E ai otavio, obrigado por este codigo tem ajudado muita gente desde o dia que foi lançado. Gostaria de sabe se vc tem um exemplo de uso de Selects e se vc ja usou selects dinamicos com esta classe, eu estava tentando fazer isso mas nao fui feliz. Abração
Olá, disse que iria publicar a versão 2.0 da classe, ela já está disponível.
Adorei essa ai e gostaria da nova versão se tiver pronta.
Abraço
Anderson
opa fera desculpa a demora ...
Pra ser mais exato tenho um frame work bem legal para publicar mas to meio sem tempo nos proximos 30 dias....
quero ver se consigo publicar mes que vem....
abraço
Postar um comentário