Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Campos Input Vetorizados Olá Pessoal, Em minhas aplicações algumas vezes faço uso de campos vetorizados no html. Isso é particularmente útil quando você cria campos dinamicamente eu uso variáveis variáveis. No meu caso eu já tenho um banco existente. Imaginem dois objetos e suas relações. Eu tenho a entidade categoria e outra entidade idioma e uma relação entre as duas logo a mesma categoria pode ter tr...
RM
Campos Input Vetorizados  
Fechado
Olá Pessoal,

Em minhas aplicações algumas vezes faço uso de campos vetorizados no html. Isso é particularmente útil quando você cria campos dinamicamente eu uso variáveis variáveis. No meu caso eu já tenho um banco existente. Imaginem dois objetos e suas relações.
Eu tenho a entidade categoria e outra entidade idioma e uma relação entre as duas logo a mesma categoria pode ter tradução de seu nome N vezes de acordo com os idiomas inseridos na entidade idioma.

Então o formulário vai ter um input assim: <input name="nome_categoria[id_do_idioma]">

Supondo que eu tenha 2 idiomas: 1 - português e 2 - inglês que serão criados dinamicamente ex:

<input name="nome_categoria[1]">
<input name="nome_categoria[2]">

Sendo assim na hora de recupera-los. Faço um laço de repetição que vai pegar o campo e seus valores sendo o índice selecionado relativo ao idioma que será cadastrado como registro na entidade que relaciona ambas categoria_idioma.

Fiz um pequeno exemplo muitos desconhecem esta capacidade do html de criar campos vetorizados que são particularmente úteis quando temos que criar campos em tempo de execução dinamicamente assim como o recurso de variáveis variáveis que não é muito utilizado mas é uma das minhas características favoritas do PHP.

Segue abaixo o exemplo:

  1. <?php
  2. class teste extends TPage
  3. {
  4.     public function __construct()
  5.     {
  6.         parent::__construct();
  7.         $this->form = new TQuickForm;
  8.         $this->form->class 'tform';
  9.         $this->form->setFormTitle('Campo Texto Vetorizado');
  10.         $this->form->style='max-width: 400px';
  11.         
  12.         
  13.         $idiomas[1]='Inglês';
  14.         $idiomas[2]='Português';
  15.         $idiomas[3]='Espanhol';
  16.         $idiomas[4]='Francês';
  17.         $idiomas[5]='Italiano';
  18.         
  19.         
  20.         foreach ($idiomas as $key => $value)    
  21.         {
  22.             // create the form fields
  23.             $nome_campo "nome_$key";
  24.             $$nome_campo = new TEntry("nome[$key]");
  25.             // add the fields inside the form
  26.             $this->form->addQuickField("Nome Categoria ($value):",    $$nome_campo,    100);
  27.         }
  28.     
  29.         // define the form action 
  30.         $this->form->addQuickAction('Save', new TAction(array($this'onSave')), 'ico_save.png');
  31.         
  32.         // wrap the page content using vertical box
  33.         $vbox = new TVBox;
  34.         //$vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  35.         $vbox->add($this->form);
  36.         parent::add($vbox);
  37.         
  38.        
  39.     }
  40.     
  41.     public function onSave($param)
  42.     {
  43.         $data $this->form->getData(); // optional parameter: active record class
  44.         
  45.         // put the data back to the form
  46.         $this->form->setData($data);
  47.         // creates a string with the form element's values
  48.         foreach ($_POST['nome'] as $key => $value)
  49.         {
  50.             $message .= "Nome $key: "           $value "<br>";
  51.         }
  52.          // show the message
  53.         new TMessage('info'$message);
  54.     }
  55.     
  56.     
  57. }
  58. ?>


Caso exista uma forma mais elegante de fazer a mesma coisa deixe aqui um comentário eu gostaria de saber :)

PS. Não sei como este método se comportaria no PHP-GTK não testei, Mas acho que a maioria usa o framework somente no navegador agora.

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (2)


FC

Olá,

Interessante a solução.
Você acha possível criar uma matriz?
Como ficaria?

Abs,

Felipe
RM

Sim é possível com algumas poucas alterações veja o exemplo:

  1. <?php
  2. class teste extends TPage
  3. {
  4.     public function __construct()
  5.     {
  6.         parent::__construct();
  7.         $this->form = new TQuickForm;
  8.         $this->form->class 'tform';
  9.         $this->form->setFormTitle('Campo Texto Vetorizado');
  10.         $this->form->style='max-width: 400px';
  11.         
  12.         
  13.         $idiomas[1]='Inglês';
  14.         $idiomas[2]='Português';
  15.         $idiomas[3]='Espanhol';
  16.         $idiomas[4]='Francês';
  17.         $idiomas[5]='Italiano';
  18.         
  19.         $strings[1]='Nome';
  20.         $strings[2]='Metadados';
  21.         $strings[3]='keywords';
  22.         
  23.         
  24.         foreach ($idiomas as $key => $value)    
  25.         {
  26.             foreach ($strings as $key2 => $value2)    
  27.             {
  28.                 // create the form fields
  29.                 $nome_campo "nome_{$key}_{$key2}";
  30.                 $$nome_campo = new TEntry("nome[$key][$key2]");
  31.                 // add the fields inside the form
  32.                 $this->form->addQuickField("Categoria $value2 - ($value):",    $$nome_campo,    100);
  33.             }
  34.         }
  35.     
  36.         // define the form action 
  37.         $this->form->addQuickAction('Save', new TAction(array($this'onSave')), 'ico_save.png');
  38.         
  39.         // wrap the page content using vertical box
  40.         $vbox = new TVBox;
  41.         //$vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  42.         $vbox->add($this->form);
  43.         parent::add($vbox);
  44.         
  45.        
  46.     }
  47.     
  48.     public function onSave($param)
  49.     {
  50.         $data $this->form->getData(); // optional parameter: active record class
  51.         // creates a string with the form element's values
  52.         foreach ($_POST['nome'] as $key => $value)
  53.         {
  54.             unset($linhas);
  55.             foreach ($value as $key2 => $value2
  56.             {
  57.                 $linhas .= "$value2 ";
  58.             }
  59.             $message .= "Nome $key: " $linhas "<br>";
  60.         }
  61.         // show the message
  62.         new TMessage('info'$message);
  63.     }
  64.     
  65.     
  66. }
  67. ?>