Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Exibir registro do campo tipo TFile Minha tabela possui um campo onde será gravado o nome de um arquivo pdf, essa arquivo será upado para o servidor. O processo esta ocorrendo corretamente. Ocorre que quando o registro já esta salvo, gostaria que o nome do arquivo fosse exibido na tela e não apenas "Nenhum arquivo selecionado" visto que já existe um arquivo gravado nesse registro. Desde já obrigado pelo apoio. André B...
GB
Exibir registro do campo tipo TFile  
Fechado
Minha tabela possui um campo onde será gravado o nome de um arquivo pdf, essa arquivo será upado para o servidor.
O processo esta ocorrendo corretamente.

Ocorre que quando o registro já esta salvo, gostaria que o nome do arquivo fosse exibido na tela e não apenas "Nenhum arquivo selecionado" visto que já existe um arquivo gravado nesse registro.

Desde já obrigado pelo apoio.
André Bianchi

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 (6)


JD

Andre, faça uma validação no evento onEdit, por exemplo:

Vamos supor que o TFile que você esta usando recebe o nome de "photo_path" certo?
Faça uma validação para ver se já existe uma foto, se existir você seta o value:
  1. <?php
  2. if(!empty($nomeimagem)){
  3.         $data->photo_path $nomeimagem;
  4. }
  5. $this->form->setData($data);
  6. ?>

Não cheguei a testar com TFile.
Testa ai, se não der certo, posta seu código pra facilitar a ajuda.
GB

Olá Jheferson.
Basicamente havia tentado fazer assim, procurei novamente conforme seu exemplo, mas ainda não tiver resultado.



  1. <?php
  2. /**
  3.  * BsRecursosForm Form
  4.  * @author  <your name here>
  5.  */
  6. class BsRecursosForm extends TPage
  7. {
  8.     protected $form// form
  9.     protected $datagrid;
  10.     private   $frame;
  11.     
  12.     /**
  13.      * Form constructor
  14.      * @param $param Request
  15.      */
  16.     public function __construct$param )
  17.     {
  18.         parent::__construct();
  19.         
  20.         // creates the form
  21.         $this->form = new TForm('form_BsRecursos');      
  22.         
  23.         // Cria tables        
  24.         $table_data = new TTable;
  25.         $table_manu = new TTable;
  26.         
  27.         $row=$table_data->addRow(); // adiciona linha
  28.         $cell=$row->addCell(new TLabel('<b>Recursos</b>'));
  29.         $cell->valign 'top'// define alinhamento
  30.         
  31.         // Cria Notebooks
  32.         $notebook = new TNotebook(500250);
  33.         $this->form->add($notebook);
  34.         $notebook->appendPage('Recursos'$table_data);
  35.         $notebook->appendPage('Manutenções'$table_manu);
  36.         
  37.         // create the form fields
  38.         $id = new TEntry('id');
  39.         $situacao = new TCombo('situacao');         
  40.         $bs_tipos_recursos_id = new TDBCombo('bs_tipos_recursos_id','bs_cadastros','BsTiposRecursos''id''descricao');
  41.         $bs_marcas_id = new TDBCombo('bs_marcas_id','bs_cadastros','BsMarcas''id''descricao');        
  42.         $modelo = new TEntry('modelo');
  43.         $identificacao = new TEntry('identificacao');
  44.         $bs_fornecedores_id = new TSeekButton('bs_fornecedores_id');
  45.         $fornecedor_nome = new TEntry('fornecedor_nome');       
  46.         $numero_nf = new TEntry('numero_nf');
  47.         $emissao_nf = new TDate('emissao_nf');
  48.         $data_garantia = new TDate('data_garantia');
  49.         $copia_nf = new TFile('copia_nf');
  50.         $valor_compra = new TEntry('valor_compra');
  51.         $observacoes = new TText('observacoes');
  52.         // complete upload action
  53.         $copia_nf->setCompleteAction(new TAction(array($this'onComplete')));
  54.         
  55.         // define a acao para fornecedor_id
  56.         $obj = new FornecedorSeek;
  57.         $obj->setInteractionForm('form_BsFornecedores');
  58.         $action = new TAction(array($obj'onReload'));
  59.         $bs_fornecedores_id->setAction($action);
  60.         $bs_fornecedores_id->setSize(100);
  61.         $fornecedor_nome->setEditable(FALSE);
  62.         $fornecedor_nome->setSize(300);         
  63.         // campo sitação
  64.         $combo_items = array();       
  65.         $combo_items['A'] ='Ativo';
  66.         $combo_items['D'] ='Desativado';
  67.         $combo_items['M'] ='Manutenção';
  68.         $situacao->addItems($combo_items);  
  69.         // seta tamanho dos campos e mascaras
  70.         $id->setSize(60);
  71.         $situacao->setSize(100);
  72.         $bs_tipos_recursos_id->setSize(150);
  73.         $bs_marcas_id->setSize(150);
  74.         $modelo->setSize(200);
  75.         $identificacao->setSize(150);
  76.         $numero_nf->setSize(60);
  77.         $emissao_nf->setSize(100);
  78.         $data_garantia->setSize(100);
  79.         $bs_fornecedores_id->setSize(60);
  80.         $fornecedor_nome->setSize(300);
  81.         $observacoes->setSize(300);
  82.         $copia_nf->setSize(400);
  83.         $valor_compra->setSize(100);
  84.         $valor_compra->setNumericMask(2,',','.',FALSE);
  85.                 
  86.         // add the fields
  87.         $table_data->addRowSet('Código', array($id, new Tlabel('<b>Situação</b>'), $situacao));
  88.         $table_data->addRowSet('Tipo Recurso'$bs_tipos_recursos_id );   
  89.         $table_data->addRowSet('Marca', array( $bs_marcas_id, new TLabel('Modelo') ,$modelo ));  
  90.         $table_data->addRowSet('Identificação',$identificacao);
  91.         $table_data->addRowSet('Código/Fornec.', array($bs_fornecedores_id,$fornecedor_nome) );
  92.         $table_data->addRowSet('Número da NF', array($numero_nf, new TLabel('Emissão NF') ,$emissao_nf ));
  93.         $table_data->addRowSet('Garantia',$data_garantia);
  94.         $table_data->addRowSet('Valor Compra',$valor_compra);
  95.         $table_data->addRowSet('Copia NF'$copia_nf );  
  96.         //$table_data->addRowSet('Observações', $observacoes);
  97.                                 
  98.         // create an action onSave
  99.         $button1=new TButton('Save');
  100.         $button1->setAction(new TAction(array($this'onSave')), _t('Save'));
  101.         $button1->setImage('fa:floppy-o');
  102.         
  103.         // create an action onSave
  104.         $button2=new TButton('New');
  105.         $button2->setAction(new TAction(array($this'onClear')), _t('New'));
  106.         $button2->setImage('bs:plus-sign green');
  107.                 
  108.         // create an action Back Listing
  109.         $button3=new TButton('list');
  110.         $button3->setAction(new TAction(array('BsRecursosList''onReload')), _t('Back to the listing'));
  111.         $button3->setImage('ico_datagrid.png');
  112.                
  113.         $subtable = new TTable;
  114.         $row $subtable->addRow();
  115.         $row->addCell($button1);
  116.         $row->addCell($button2);
  117.         $row->addCell($button3);        
  118.         if (!empty($id))
  119.         {
  120.             $id->setEditable(FALSE);
  121.         }
  122.         
  123. /**********************************************************************************/
  124.         $row=$table_manu->addRow(); // adiciona linha
  125.         $cell=$row->addCell(new TLabel('<b>Manutenções</b>'));
  126.         $cell->valign 'top'// define alinhamento
  127.         $manutencoes_list  = new TMultiField('manutencoes_list'); // cria multifield
  128.         $manutencoes_list->setHeight(200);
  129.         $manutencoes_list->setClass('BsManutencoes');
  130.         
  131.         $data_cad = new TDate('data_cad');
  132.         $descricao = new TEntry('descricao');
  133.         $observacoes = new TEntry('observacoes');
  134.         $prazo_retorno = new TDate('prazo_retorno');
  135.         $data_chegada = new TDate('data_chegada');
  136.         $custo = new TEntry('custo');
  137.         
  138.         $data_cad->setSize(100);
  139.         $descricao->setSize(400);
  140.         $observacoes->setSize(400);
  141.         $prazo_retorno->setSize(100);
  142.         $data_chegada->setSize(100);
  143.         $custo->setSize(100);
  144.         $custo->setNumericMask(2,',','.',FALSE);
  145.                 
  146.         // Adicionar Colunas do multfield
  147.         $manutencoes_list->addField('data_cad''Entrada'$data_cad80);
  148.         $manutencoes_list->addField('descricao''Descrição'$descricao 300);               
  149.         $manutencoes_list->addField('observacoes''Observações'$observacoes300);
  150.         $manutencoes_list->addField('prazo_retorno''Prazo'$prazo_retorno80);
  151.         $manutencoes_list->addField('data_chegada''Conclusão'$data_chegada80);
  152.         $manutencoes_list->addField('custo''Custo'$custo80);        
  153.                 
  154.         
  155.         $row=$table_manu->addRow();
  156.         $row->addCell($manutencoes_list);
  157.                 
  158. /**********************************************************************************/
  159.                
  160.         $this->form->setFields(array($id$situacao,
  161.                                      $bs_tipos_recursos_id
  162.                                      $bs_marcas_id,
  163.                                      $modelo,
  164.                                      $identificacao,
  165.                                      $bs_fornecedores_id
  166.                                      $fornecedor_nome
  167.                                      $numero_nf,
  168.                                      $emissao_nf,
  169.                                      $data_garantia,
  170.                                      $valor_compra,
  171.                                      $copia_nf,
  172.                                      $observacoes,
  173.                                      $button1
  174.                                      $button2
  175.                                      $button3
  176.                                      $manutencoes_list));
  177.                         
  178.         // vertical box container
  179.         $container = new TVBox;
  180.         $container->style 'width: 90%';
  181.         //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  182.         $container->add($this->form);       
  183.         $container->add($subtable);
  184.         
  185.         parent::add($container);
  186.     }
  187.     /**
  188.      * Save form data
  189.      * @param $param Request
  190.      */
  191.     public function onSave$param )
  192.     {
  193.         try
  194.         {
  195.             TTransaction::open('bs_cadastros'); // open a transaction
  196.             $this->form->validate(); // validate form data
  197.             $object = new BsRecursos;  // create an empty object
  198.             $data $this->form->getData(); // get form data as array
  199.             $object->fromArray( (array) $data); // load the object with data
  200.                     
  201.             $source_file   'tmp/'.$object->copia_nf;
  202.             $target_file   'images/' $object->copia_nf;
  203.             $finfo         = new finfo(FILEINFO_MIME_TYPE);
  204.             if (file_exists($source_file)) // AND ($finfo->file($source_file) == 'image/png' OR $finfo->file($source_file) == 'image/jpeg'))
  205.             {
  206.                 // move to the target directory
  207.                 rename($source_file$target_file);
  208.             }
  209.                     
  210.             /*** Tabela Manutenções ***/                        
  211.             if ($data->manutencoes_list)
  212.             {
  213.                 foreach ($data->manutencoes_list as $manu)
  214.                 {
  215.                     $object->addBsManutencoes($manu);
  216.                     
  217.                     // Caso o campo de data de chegada esteja vazio 
  218.                     // Significa que temos uma manutenção pedendente 
  219.                     // então o estatus do recurso deve ser M-Manutenção
  220.                     
  221.                     if (($manu->data_chegada == '') and ( $object->situacao == 'A'))
  222.                     {
  223.                         $data->situacao 'M';
  224.                         $object->situacao 'M';
  225.                     }
  226.                     if (($manu->data_chegada == '') and ( $object->situacao == 'M'))
  227.                     {
  228.                         $data->situacao 'A';
  229.                         $object->situacao 'A';
  230.                     }
  231.                 }
  232.             }    
  233.             /***************************/        
  234.         
  235.             // save the object            
  236.             $object->store();                                        
  237.             // get the generated id
  238.             $data->id $object->id;
  239.                     
  240.             $this->form->setData($data); // fill form data
  241.             TTransaction::close(); // close the transaction
  242.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));            
  243.         
  244.         }
  245.         catch (Exception $e// in case of exception
  246.         {
  247.             new TMessage('error'$e->getMessage()); // shows the exception error message
  248.             $this->form->setData$this->form->getData() ); // keep form data
  249.             TTransaction::rollback(); // undo all pending operations
  250.         }
  251.                      
  252.     }
  253.         
  254.     /**
  255.      * Clear form data
  256.      * @param $param Request
  257.      */
  258.     public function onClear$param )
  259.     {
  260.         $this->form->clear();
  261.     }
  262.     
  263.     /**
  264.      * Load object to form data
  265.      * @param $param Request
  266.      */
  267.     public function onEdit$param )
  268.     {
  269.         try
  270.         {
  271.             if (isset($param['key']))
  272.             {
  273.                                
  274.                 $key $param['key'];  // get the parameter $key
  275.                 TTransaction::open('bs_cadastros'); // open a transaction
  276.                 $object = new BsRecursos($key); // instantiates the Active Record                
  277.                 if(!empty($object->copia_nf))
  278.                 {
  279.                   $object->copia_nf $object->copia_nf;
  280.                 }
  281.                
  282.                 $object->fornecedor_nome $object->bs_fornecedores->nome;
  283.                                                        
  284.                 // load the manutenções (composition)
  285.                 $object->manutencoes_list $object->getBsManutencoess();
  286.                 
  287.                 $this->form->setData($object); // fill the form
  288.                 TTransaction::close(); // close the transaction
  289.             }
  290.             else
  291.             {
  292.                 $this->form->clear();
  293.             }
  294.         }
  295.         catch (Exception $e// in case of exception
  296.         {
  297.             new TMessage('error'$e->getMessage()); // shows the exception error message
  298.             TTransaction::rollback(); // undo all pending operations
  299.         }
  300.     }
  301.     
  302.     
  303.     /**
  304.      * Load the datagrid with data
  305.      */
  306.     public function onReload($param NULL)
  307.     {
  308.         try
  309.         {
  310.         
  311.             // open a transaction with database 'bs_cadastros'
  312.             TTransaction::open('bs_cadastros');
  313.             
  314.             // creates a repository
  315.             $repository = new TRepository('BsRecursos');
  316.             $limit 10;
  317.             // creates a criteria
  318.             $criteria = new TCriteria;
  319.             
  320.             // default order
  321.             if (empty($param['order']))
  322.             {
  323.                 $param['order'] = 'id';
  324.                 $param['direction'] = 'asc';
  325.             }
  326.             $criteria->setProperties($param); // order, offset
  327.             $criteria->setProperty('limit'$limit);
  328.             
  329.             $criteria->add(new TFilter('id''='1));
  330.             //if (TSession::getValue('BsLinhasList_filter_id')) {
  331.             //    $criteria->add(TSession::getValue('BsLinhasList_filter_id')); // add the session filter
  332.             //}
  333.             
  334.             // load the objects according to criteria
  335.             $objects $repository->load($criteriaFALSE);
  336.             
  337.             if (is_callable($this->transformCallback))
  338.             {
  339.                 call_user_func($this->transformCallback$objects$param);
  340.             }
  341.             
  342.             $this->datagrid->clear();
  343.             if ($objects)
  344.             {
  345.                 // iterate the collection of active records
  346.                 foreach ($objects as $object)
  347.                 {
  348.                     // add the object inside the datagrid
  349.                     $this->datagrid->addItem($object);
  350.                 }
  351.             }
  352.             
  353.             // reset the criteria for record count
  354.             $criteria->resetProperties();
  355.             $count$repository->count($criteria);
  356.             
  357.             $this->pageNavigation->setCount($count); // count of records
  358.             $this->pageNavigation->setProperties($param); // order, page
  359.             $this->pageNavigation->setLimit($limit); // limit
  360.                                                
  361.             // close the transaction
  362.             TTransaction::close();
  363.             $this->loaded true;
  364.         }
  365.         catch (Exception $e// in case of exception
  366.         {
  367.             // shows the exception error message
  368.             new TMessage('error'$e->getMessage());
  369.             // undo all pending operations
  370.             TTransaction::rollback();
  371.         }
  372.     }
  373.     /**
  374.      * On complete upload
  375.      */
  376.     public static function onComplete($param)
  377.     {
  378.         new TMessage('info''Upload completed: '.$param['copia_nf']);
  379.                                                                   
  380.         // refresh photo_frame
  381.         //TScript::create("$('#photo_frame').html('')");
  382.         //TScript::create("$('#photo_frame').append(\"<img style='width:100%' src='tmp/{$param['copia_nf']}'>\");");        
  383.     }
  384.             
  385. }
  386. ?>

</your>
JD

Pelo que pesquisei não é possível realmente setar um valor para um input do tipo file.
Você pode usar javascript pra fazer uma validação.
Coloque isso no final do construct e faça um teste.
O teste que fiz aqui substituiu o input file por um texto simples com o nome do arquivo.
  1. <?php
  2. $script = new TElement('script');
  3.         $script->add("$(document).ready(function(){
  4.             var elemento = $('input[name=copia_nf]');
  5.             var conteiner = elemento.parent();
  6.             var foto = elemento.val();
  7.             
  8.             if(foto != ''){
  9.                 elemento.remove();
  10.                 conteiner.append(foto);
  11.             }
  12.         });");
  13.         $container->add($script);
  14. ?>
GB

Ola Jheferson.
Fiz o teste que mandou, ao abrir a consulta do registro ele exibi o nome do arquivo, estranho que ele exibi o nome abaixo do objeto TFile e não dentro substituindo a mensagem de "Nenhum arquivo selecionado".

Mesmo assim precisei remover a linha "elemento.remove();" do script pois estava ocorrendo o erro no momento da action onComplete.
linha: new TMessage('info', 'Upload completado: '.$param['copia_nf']);
Notice: Undefined index: copia_nf in C:wampwwwGTIappcontrolbs_cadastrosBsRecursosForm.class.php on line 405

Ocorre também que como ele não esta alterando o texto do input dentro do TFile e sim colocar por fora, quando altero um arquivo o texto simples que ficou por fora do TFile não altera.

Obrigado pelo apoio.
JD

Este erro ocorre pois o "remove()" remove o input file do form no DOM, mas tente o seguinte:

  1. <?php
  2. $script = new TElement('script');
  3.         $script->add("$(document).ready(function(){
  4.             var elemento = $('input[name=copia_nf]');
  5.             var conteiner = elemento.parent();
  6.             var btnText = elemento.val() == '' ? \"Selecione...\" : elemento.val();
  7.             var btnFile = $('<input type=\"button\" onclick=\"$('input[name=copia_nf]').click();\" />');
  8.             btnFile.val(btnText);
  9.                 elemento.hide();
  10.                 conteiner.append(btnFile);       
  11.         });");
  12.         $container->add($script);
  13. ?>
JD

Escape as aspas duplas assim \" por alguma razão o escape não apareceu no fonte que eu postei.