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 Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


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

</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. if(foto != ''){
  8. elemento.remove();
  9. conteiner.append(foto);
  10. }
  11. });");
  12. $container->add($script);
  13. ?>
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.