Construindo componentes em PHP e jQuery

Você já deve ter visto alguns frameworks na internet que implementam diversas facilidades ao desenvolvimento de páginas e sistemas web como MVC e outros. Ao mesmo tempo pode ter visto frameworks javascript que implementam componentes visuais com um visual bacana e que facilitam, muitas vezes, a vida do programador na hora de desenvolver suas interfaces.

[ Hits: 26.637 ]

Por: Evaldo Barbosa em 03/02/2009


Introdução



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;
      }
   }
}
?>

    Próxima página

Páginas do artigo
   1. Introdução
   2. Testando a classe
   3. Estendendo a classe Input para facilitar a sua vida
Outros artigos deste autor

Abordagem exemplificada à Orientação a Objetos com PHP

Gerando gráficos com PHP e highcharts.com

Abordagem exemplificada de orientação à objeto com PHP 5

Macromedia Studio 8 no Wine em detalhes

Utilizando PHP e Apache para desligar um Ubuntu

Leitura recomendada

Enganando o proxy Squid (download de arquivos)

Captive Portal Customizado

Easy Gallery - Componente Joomla

Ambiente LAMP no Debian

Conheça o PHP-Fusion

  
Comentários
[1] Comentário enviado por removido em 05/02/2009 - 16:19h

Excelentge artigo

[2] Comentário enviado por evaldobarbosa em 05/02/2009 - 17:27h

Muito obrigado por ter lido e dado esse feedback, ilsahec, isso me deixa mais animado a escrever outro desse tipo.

[3] Comentário enviado por evaldobarbosa em 05/02/2009 - 17:43h

Gostaria de sinalizar, como efeito de errata, um pequeno erro que pode comprometer a classe.
Onde chamo, no type, date_picker, troque-se por datepicker, sem o "_", evitando o erro gerado em js.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts