Durante muitos anos o chamado "código macarrão" imperou absoluto e até hoje páginas web estão por aí mostrando que ainda existe esse tipo de programação. O Dreamweaver contribuiu enormemente para isso, assim como outros editores HTML, a popularizar a programação em PHP e em consequência disso a falta de normas e estilos na hora de programar em PHP.
Mais sobre isso você encontra na coluna do Igor Escobar (encontrada no
site iMasters).
O objetivo deste artigo é a implementação de forma elegante de uma classe PHP que gerará um objeto
InputHTMLElement e um
script JS que chamará um plugin, dependendo do tipo (atributo type do objeto input) que atribuirmos a ele.
Criando classe Input em PHP
Abaixo você verá o código da classe Input, feita em PHP, que encapsula toda a complexidade dessa nossa árdua tarefa.
Código de class.input.lib.php:
<?
/**
* Classe Input para saídas em jQuery utilizando
* plugins encontrados na internet.
*
* @author Evaldo Barbosa <evaldobarbosa@hotmail.com>
* @copyright 2009 - Tryade Software - http://www.tryadesoftware.com.br/
* @version 1.0
*/
class Input {
private $name;
private $value;
private $readOnly = false;
private $size;
private $maxlength;
private $type="text";
private $compType;
private $className="inputbase";
private $mask;
private $outScript;
/**
* Construtor da classe com vários parâmetros que agilizarão
* a chamada de instâncias com o máximo de produtividade
*
* @param String $name
* @param String $value
* @param Boolean $readOnly
* @param Integer $size
* @param Integer $maxlength
* @param String $type
* @param String $className
*/
function __construct($name,$value="",$readOnly=false,$size=0,$maxlength=0,$type="text",$className="inputbase") {
$this->setName($name);
$this->setValue($value);
$this->readOnly = $readOnly;
$this->size = $size;
$this->maxlength = $maxlength;
$this->setType($type);
$this->className = $className;
}
/**
* Aglutina todos os getters formando a string html
* do componente
*
* @return String
*/
function render() {
return sprintf("<input%s%s%s%s%s />", $this->getType(), $this->getName(), $this->getValue(), $this->getSize(), $this->getMaxlength());
}
/* SETTERS - Estes métodos podem ser estendidos caso haja necessidade */
/**
* Setter de nome do objeto input
*
* @param String $name
*/
function setName($value) {
$this->name = $value;
}
/**
* Setter de valor (value) da instância
*
* @param String $value
*/
function setValue($value) {
$this->value = $value;
}
/**
* Setter de Tipo (type) da instância
*
* @param String $value
*/
function setType($value) {
switch ($value) {
case "password": $this->type = "password"; break;
case "text": $this->type = "text"; break;
case "cpf": $this->type = "text"; $this->mask = "999.999.999-99"; break;
case "cep": $this->type = "text"; $this->mask = "99.999-999"; break;
case "date": $this->type = "text"; break;
case "money": $this->type = "text"; break;
default: $this->type = "text"; break;
}
$this->compType = $value;
$this->setOutScript();
}
/**
* Atribui à instância o script correspondente ao tipo
* que ela pertence
*
* @return void
*/
function setOutScript() {
switch ($this->compType) {
case "date": $this->outScript = sprintf("$('#%s').date_picker();\n",$this->name); break;
case "money": $this->outScript = sprintf("$('#example2').priceFormat({prefix:'R$ ',centsSeparator:',',thousandsSeparator:'.'});\n",$this->name); break;
case "cpf": $this->outScript = sprintf("$('#%s').mask('%s');\n",$this->name,$this->mask); break;
case "cep": $this->outScript = sprintf("$('#%s').mask('%s');\n",$this->name,$this->mask); break;
}
}
/* GETTERS */
/**
* Getter de nome
*
* @return String
*/
function getName() {
return sprintf( " name=\"%s\" id=\"%s\"", $this->name, $this->name);
}
/**
* Getter de Valor (value)
*
* @return String
*/
function getValue() {
return sprintf( " value=\"%s\"", $this->value);
}
/**
* Getter de Classe CSS
*
* @return unknown
*/
function getClassName() {
return sprintf(" class=\"%s\"",$this->className);
}
/**
* Getter de Tipo(type)
*
* @return String
*/
function getType() {
return sprintf(" type=\"%s\"",$this->type);
}
/**
* Getter do tamanho do campo (size)
*
* @return String
*/
function getSize() {
return ($this->size > 0) ? sprintf(" size=\"%s\"",$this->size) : "";
}
/**
* Getter do máximo de caracteres do campo (maxlength)
*
* @return String
*/
function getMaxlength() {
return ($this->maxlength > 0) ? sprintf(" maxlength=\"%s\"",$this->maxlength) : "";
}
/**
* Getter de saída da string em javascript que instancia o objeto jquery
*
* @param boolean $withScriptTag
* @return String
*/
function getOutScript($withScriptTag=false) {
if ($withScriptTag) {
return sprintf("<script>\n%s</script>",$this->outScript);
} else {
return $this->outScript;
}
}
}
?>