Lançado Adianti Framework 7.6!
Clique aqui para saber mais
TFile com Formulário de Multivalores Pessoal, estou tentando inserir um formulário parecido com o de Multivalues o tutor (http://tutor.dev/index.php?class=FormMultiValuesView) só modificando os campos que um contém um TFile e outro a descrição. O problema que ao inserir o primeiro arquivo com sua descrição e clicar em Add, uma linha é adicionada com o valor do arquivo inserido anteriormente no TFile. A questão é como setar ...
CJ
TFile com Formulário de Multivalores  
Pessoal, estou tentando inserir um formulário parecido com o de Multivalues o tutor (tutor.dev/index.php?class=FormMultiValuesView) só modificando os campos que um contém um TFile e outro a descrição. O problema que ao inserir o primeiro arquivo com sua descrição e clicar em Add, uma linha é adicionada com o valor do arquivo inserido anteriormente no TFile. A questão é como setar o campo TFile para que não venha com esse último valor inserido.

Segue o código:

protected $form; // form protected $table_files; protected $detail_row; /** * Form constructor * @param $param Request */ public function __construct( $param ) { parent::__construct(); $this->form = new BootstrapFormBuilder('form_Contrato'); $this->form->setFormTitle('Contratos Novo/Editar'); // creates the form // create the form fields $id = new TEntry('id'); $cliente_id = new TSeekButton('cliente_id'); $cliente_nome = new TEntry('cliente_nome'); $beneficio_id = new TEntry('beneficio_id'); $data_contrato = new TDate('data_contrato'); $bancopg_id = new TDBCombo('bancopg_id', 'contratos', 'Bancopg', 'id', 'nome', 'nome'); $agencia = new TEntry('agencia'); $conta_credito = new TEntry('conta_credito'); $conta_id = new TDBCombo('conta_id', 'contratos', 'Conta', 'id', 'nome', 'nome'); $banco_id = new TDBCombo('banco_id', 'contratos', 'Banco', 'id', 'nome', 'nome'); $convenio_id = new TDBCombo('convenio_id', 'contratos', 'Convenio', 'id', 'nome', 'nome'); // Pega apenas corretores ativos $criterio = new TCriteria; $criterio->add(new TFilter('active', '=', 'Y')); $promotor_id = new TDBCombo('promotor_id', 'contratos', 'SystemUser', 'id', 'name', 'name', $criterio); $digitador_id = new TDBCombo('digitador_id', 'contratos', 'SystemUser', 'id', 'name', 'name'); $valorliquido = new TEntry('valorliquido'); $valoremprestimo = new TEntry('valoremprestimo'); $parcelas = new TEntry('parcelas'); $tipo_id = new TDBCombo('tipo_id', 'contratos', 'Tipo', 'id', 'nome', 'nome'); $obs = new TText('obs'); $cliente_id->setSize('15%'); $cliente_nome->setSize('85%'); $beneficio_id->setSize('100%'); $data_contrato->setSize('100%'); $bancopg_id->setSize('100%'); $agencia->setSize('100%'); $conta_credito->setSize('100%'); $conta_id->setSize('100%'); $banco_id->setSize('100%'); $convenio_id->setSize('100%'); $promotor_id->setSize('100%'); $digitador_id->setSize('100%'); $valorliquido->setSize('100%'); $valoremprestimo->setSize('100%'); $parcelas->setSize('100%'); $tipo_id->setSize('100%'); $obs->setSize('100%'); $obj = new ClienteSeek; $action_cli = new TAction(array($obj, 'onReload')); $cliente_id->setAction($action_cli); // Máscaras $data_contrato->setMask('dd/mm/yyyy', false); $data_contrato->setDatabaseMask('yyyy-mm-dd'); $parcelas->setInputType('number'); $valoremprestimo->setNumericMask(2, ',', '.', true); $valorliquido->setNumericMask(2, ',', '.', true); // Set Fields $cliente_nome->setEditable(FALSE); $digitador_id->setEditable(FALSE); $banco_id->enableSearch(); $convenio_id->enableSearch(); $promotor_id->enableSearch(); $digitador_id->enableSearch(); $bancopg_id->enableSearch(); $tipo_id->enableSearch(); $conta_id->enableSearch(); // Validações $cliente_id->addValidation('Cliente', new TRequiredValidator); $beneficio_id->addValidation('Benefício', new TRequiredValidator); $data_contrato->addValidation('Data Contrato', new TRequiredValidator); $bancopg_id->addValidation('Banco Cliente', new TRequiredValidator); $agencia->addValidation('Agência', new TRequiredValidator); $conta_credito->addValidation('Conta', new TRequiredValidator); $conta_id->addValidation('Tipo de Conta', new TRequiredValidator); $banco_id->addValidation('Banco Convênio', new TRequiredValidator); $convenio_id->addValidation('Convênio', new TRequiredValidator); $promotor_id->addValidation('Corretor', new TRequiredValidator); $valorliquido->addValidation('Valor líquido', new TRequiredValidator); $valoremprestimo->addValidation('Valor empréstimo', new TRequiredValidator); $parcelas->addValidation('Parcelas', new TRequiredValidator); $tipo_id->addValidation('Tipo Contrato', new TRequiredValidator); // Pega o usuário logado $logged = TSession::getValue('userid'); $digitador_id->setValue($logged); // add the fields if (!empty($id)) { $id->setEditable(FALSE); } $this->form->appendPage('Dados do Empréstimo'); $this->form->addFields([new TLabel('Id')], [$id] ); $this->form->addFields([new TLabel('Cliente', 'red')], [$cliente_id, $cliente_nome]); $this->form->addFields([new TLabel('Beneficio', 'red')], [$beneficio_id], [new TLabel('Data Contrato', 'red')], [$data_contrato]); $this->form->addFields([new TLabel('Tipo Contrato', 'red')], [$tipo_id], [new TLabel('Banco Convênio', 'red')], [$banco_id]); $this->form->addFields([new TLabel('Convenio', 'red')], [$convenio_id], [new TLabel('Corretor', 'red')], [$promotor_id]); $this->form->addFields([new TLabel('Digitador')], [$digitador_id], [new TLabel('Parcelas', 'red')], [$parcelas]); $this->form->addFields([new TLabel('Valor emprestimo', 'red')], [$valoremprestimo], [new TLabel('Valor líquido', 'red')], [$valorliquido]); $this->form->appendPage('Dados do Crédito'); $this->form->addFields([new TLabel('Banco Cliente', 'red')], [$bancopg_id], [ new TLabel('Tipo de Conta', 'red') ],[ $conta_id ]); $this->form->addFields([new TLabel('Agencia', 'red')], [$agencia], [ new TLabel('Conta', 'red')],[ $conta_credito]); $this->form->appendPage('Arquivos do Contrato'); $this->table_files = new TTable; $this->table_files->width = '100%'; $this->table_files->addSection('thead'); $this->table_files->addRowSet( new TLabel('Arquivo', '#8082C3',10, 'b'), new TLabel('Descrição', '#8082C3',10, 'b') ); $this->form->addContent( [ new TLabel('Arquivos do Contrato') ], [ $this->table_files ] ); $this->form->appendPage('Observação'); $this->form->addFields([new TLabel('Observação')],[ $obs ] ); // create the form actions $this->form->addAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o'); $this->form->addAction(_t('New'), new TAction(array($this, 'onClear')), 'bs:plus-sign green'); $this->form->addAction('Listagem de Contratos', new TAction(array('ContratoFormList', 'onReload')), 'fa:table blue'); $this->detail_row = 0; $change_action1 = new TAction(array($this, 'onChangeBanco')); $banco_id->setChangeAction($change_action1); // vertical box container $container = new TVBox; $container->style = 'width: 100%'; $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__)); $container->add( $this->form); parent::add($container); } public function addFileRow($item) { $this->table_files->addSection('tbody'); $uniqid = mt_rand(1000000, 9999999); // create fields $arquivo = new TFile('arquivo[]'); $desc = new TEntry('desc[]'); // set id's $arquivo->setId('arquivo_'.$uniqid); $desc->setId('desc_'.$uniqid); $desc->addValidation( 'Descrição', new TRequiredValidator ); $desc->forceUpperCase(); // set sizes $arquivo->setSize('90%'); $desc->setSize('100%'); // set row counter $arquivo->{'data-row'} = $this->detail_row; $desc->{'data-row'} = $this->detail_row; // set value if (!empty($item->arquivo)) { $arquivo->setValue( $item->arquivo ); } if (!empty($item->desc)) { $desc->setValue( $item->desc ); } // create delete button $del = new TImage('fa:trash-o red'); $del->onclick = 'ttable_remove_row(this)'; $row = $this->table_files->addRow(); // add cells $row->addCell($arquivo); $row->addCell($desc); $row->addCell( $del ); $row->{'data-row'} = $this->detail_row; // add form field $this->form->addField($arquivo); $this->form->addField($desc); $this->detail_row ++; }

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (2)


CJ

Só acrescentando que ao visualizar o código no inspector do Chrome, o Adianti cria um campo Hidden para cada linha gerada e elas estão com os ID's diferentes. Mas também cria uma linha de tipo file, mas com os mesmos ID's.

tbody> <tr data-row="0"> <td><div style="display:inline;width:100%;" id="div_file_1656031408"> <input class="tfield" widget="thidden" id="thidden_1547767349" name="arquivo[]" type="hidden" style="width:200"><input class="tfield" widget="tfile" data-row="0" id="arquivo_4983044" name="file_arquivo[]" type="file" style="width:90%;;height:25px;"></div> <script language="JavaScript"> tfile_start('arquivo_4983044', 'engine.php?class=AdiantiUploaderService', 'div_file_1656031408', 'undefined');</script></td> <td><input class="tfield" widget="tentry" type="text" onkeypress="return tentry_upper(this)" onblur="return tentry_upper(this)" forceupper="1" style="text-transform: uppercase;width:100%;" data-row="0" name="desc[]" id="desc_4983044"></td> <td><i style="padding-right:4px" class="fa fa-trash-o red" onclick="ttable_remove_row(this)"></i> </td> </tr> <tr data-row="0"> <td><div style="display:inline;width:100%;" id="div_file_1656031408"> <input class="tfield" widget="thidden" id="thidden_2698023" name="arquivo[]" type="hidden" style="width:200" value=""><input class="tfield" widget="tfile" data-row="0" id="arquivo_4983044" name="file_arquivo[]" type="file" style="width:90%;;height:25px;"></div> <script language="JavaScript"> tfile_start('arquivo_4983044', 'engine.php?class=AdiantiUploaderService', 'div_file_1656031408', 'undefined');</script></td> <td><input class="tfield" widget="tentry" type="text" onkeypress="return tentry_upper(this)" onblur="return tentry_upper(this)" forceupper="1" style="text-transform: uppercase;width:100%;" data-row="0" name="desc[]" id="desc_2698023"></td> <td><i style="padding-right:4px" class="fa fa-trash-o red" onclick="ttable_remove_row(this)"></i> </td> </tr><tr><td><div><div style="display:inline-table;"><div id="tbutton_clone" name="clone" class="btn btn-default btn-sm" onclick="ttable_clone_previous_row(this);"><span> <i style="padding-right:4px" class="fa fa-plus-circle green"></i> Adicionar</span> </div> </div> </div> </td> </tr> </tbody>
CJ

Resolvido. Usei a solução do próprio Fórum em www.adianti.com.br/forum/pt/view_3410

Obrigado