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:
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.
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:
- <?php
- class teste extends TPage
- {
- public function __construct()
- {
- parent::__construct();
- $this->form = new TQuickForm;
- $this->form->class = 'tform';
- $this->form->setFormTitle('Campo Texto Vetorizado');
- $this->form->style='max-width: 400px';
- $idiomas[1]='Inglês';
- $idiomas[2]='Português';
- $idiomas[3]='Espanhol';
- $idiomas[4]='Francês';
- $idiomas[5]='Italiano';
- foreach ($idiomas as $key => $value)
- {
- // create the form fields
- $nome_campo = "nome_$key";
- $$nome_campo = new TEntry("nome[$key]");
- // add the fields inside the form
- $this->form->addQuickField("Nome Categoria ($value):", $$nome_campo, 100);
- }
- // define the form action
- $this->form->addQuickAction('Save', new TAction(array($this, 'onSave')), 'ico_save.png');
- // wrap the page content using vertical box
- $vbox = new TVBox;
- //$vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $vbox->add($this->form);
- parent::add($vbox);
- }
- public function onSave($param)
- {
- $data = $this->form->getData(); // optional parameter: active record class
- // put the data back to the form
- $this->form->setData($data);
- // creates a string with the form element's values
- foreach ($_POST['nome'] as $key => $value)
- {
- $message .= "Nome $key: " . $value . "<br>";
- }
- // show the message
- new TMessage('info', $message);
- }
- }
- ?>
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.
Olá,
Interessante a solução.
Você acha possível criar uma matriz?
Como ficaria?
Abs,
Felipe
Sim é possível com algumas poucas alterações veja o exemplo: