Conteúdo da página está triplicando ao exibir o form Estou com a seguinte situação: Tenho o código abaixo onde estou utilizando notebook para exibir outros conteúdos de um cliente, mas o container principal está sendo exibido 3 vezes. Eu já repassei o código e não consegui identificar onde isso pode estar ocorrendo. Peço ajuda dos mais experientes, segue código e anexo a imagem do que está acontecendo: ...
MG
Conteúdo da página está triplicando ao exibir o form  
Estou com a seguinte situação: Tenho o código abaixo onde estou utilizando notebook para exibir outros conteúdos de um cliente, mas o container principal está sendo exibido 3 vezes.

Eu já repassei o código e não consegui identificar onde isso pode estar ocorrendo.

Peço ajuda dos mais experientes, segue código e anexo a imagem do que está acontecendo:

 
  1. <?php
 
  1. <?php
  2. /**
  3. * Cliente form
  4. * @author Marcelo Gomes
  5. */
  6. class ClienteForm extends TPage
  7. {
  8. private $form;
  9. private $notebook;
  10. private $datagrid_doc;
  11. public function __construct()
  12. {
  13. parent::__construct();
  14. // cria o form
  15. $this->form = new TForm('form_clientes');
  16. $this->form->class = 'tform';
  17. $this->form->style = 'width: 100%';
  18. // cria as abas (tabelas)
  19. $table_principal = new TTable;
  20. $table_documentos = new TTable;
  21. $table_contatos = new TTable;
  22. $table_principal->style = 'width: 100%';
  23. //$table_principal->class = 'table table-responsive';
  24. $table_documentos->style = 'width: 100%';
  25. //$table_documentos->class = 'table table_responsie';
  26. $table_contatos->style = 'width: 100%';
  27. //$table_contatos->class = 'table table_responsie';
  28. // cria o notebook
  29. $this->notebook = new BootstrapNotebookWrapper(new TNotebook('100%'));
  30. // adiciona o notebook ao form
  31. $this->form->add($this->notebook);
  32. // campos tela principal
  33. $id = new TEntry('id');
  34. $razao_social = new TEntry('razao_social');
  35. $nome_fantasia = new TEntry('nome_fantasia');
  36. $tipo_pessoa_id = new TDBCombo('tipo_pessoa_id','eventos','TipoPessoas','id','descricao','id');
  37. $cpf_cnpj = new TEntry('cpf_cnpj');
  38. $cep = new TEntry('cep');
  39. $logradouro = new TEntry('logradouro');
  40. $numero = new TEntry('numero');
  41. $complemento = new TEntry('complemento');
  42. $bairro = new TEntry('bairro');
  43. $cidade = new TEntry('cidade');
  44. $estado = new TEntry('estado');
  45. $ie = new TEntry('ie');
  46. $contato = new TEntry('contato');
  47. $boleto = new TCombo('boleto');
  48. $pedidocompra = new TCombo('pedidocompra');
  49. $prazopagto = new TEntry('prazopagto');
  50. $regrafaturamento = new TEntry('regrafaturamento');
  51. $observacaofaturamento = new THtmlEditor('observacaofaturamento');
  52. $observacao = new THtmlEditor('observacao');
  53. $apelido_id = new ">TDBSeekButton('apelido_id','eventos','form_clientes','Apelidos','descricao','id','nome_apelido');
  54. $nome_apelido = new TEntry('nome_apelido');
  55. $segmento_id = new TDBCombo('segmento_id','eventos','Segmento','id','descricao','descricao');
  56. $situacao = new TCombo('situacao');
  57. // config campos
  58. $id->setSize('100%');
  59. $id->setEditable(FALSE);
  60. $razao_social->setSize('100%');
  61. $razao_social->id = 'razao_social';
  62. $nome_fantasia->setSize('100%');
  63. $nome_fantasia->id = 'nome_fantasia';
  64. $tipo_pessoa_id->setValue(1);
  65. $tipo_pessoa_id->setSize('100%');
  66. $cpf_cnpj->setMask('999.999.999-99');
  67. $cep->setMask('99999-999');
  68. $cep->setSize('100%');
  69. $numero->setMask('9!');
  70. $estado->id = 'estado'; // => define id para o javascript poder manipular maiusculo
  71. $logradouro->setSize('100%');
  72. $numero->setSize('100%');
  73. $complemento->setSize('100%');
  74. $complemento->id = 'complemento';
  75. $cidade->setSize('100%');
  76. $cidade->id = 'cidade';
  77. $estado->setSize('100%');
  78. $bairro->setSize('100%');
  79. $bairro->id = 'bairro';
  80. $ie->setSize('100%');
  81. $boleto->setSize('100%');
  82. $pedidocompra->setSize('100%');
  83. $prazopagto->setSize('100%');
  84. $regrafaturamento->setSize('100%');
  85. $observacao->setSize('100%','200');
  86. $apelido_id->setSize('80');
  87. $nome_apelido->setSize('100%');
  88. $nome_apelido->setEditable(FALSE);
  89. $segmento_id->setSize('100%');
  90. $situacao->setSize('100%');
  91. $observacaofaturamento->setSize('100%','200');
  92. // opcoes
  93. $sim_nao = array('S'=>'Sim','N'=>'Não');
  94. $op_situacao = array('A'=>'Ativo', 'I'=>'Inativo', 'B'=>'Bloqueado');
  95. $boleto->addItems($sim_nao);
  96. $pedidocompra->addItems($sim_nao);
  97. $situacao->addItems($op_situacao);
  98. // desabilita o id
  99. $id->setEditable(false);
  100. //script para definir a mascara do cpf/cn
  101. $script = new TElement('script');
  102. $script->type = 'text/javascript';
  103. $javascript = "
  104. $(document).on('change','select[name=\"tipo_pessoa_id\"]' , function(event){
  105. //alert('Entrou');
  106. $('input[name=\"cpf_cnpj\"]').val('');
  107. $('select[name=\"tipo_pessoa_id\"] > option:selected').each(function(){
  108. tipoPessoa = $(this).text();
  109. });
  110. if(tipoPessoa.toLowerCase() == 'física') {
  111. $('input[name=\"cpf_cnpj\"]').val('');
  112. $('input[name=\"cpf_cnpj\"]').attr({onkeypress:'return tentry_mask(this,event,\"999.999.999-99\")'});
  113. }
  114. if(tipoPessoa.toLowerCase() == 'jurídica') {
  115. $('input[name=\"cpf_cnpj\"]').val('');
  116. $('input[name=\"cpf_cnpj\"]').attr({onkeypress:'return tentry_mask(this,event,\"99.999.999/9999-99\")'});
  117. }
  118. });";
  119. $script->add($javascript);
  120. $tableScriptPessoa = new TTable;
  121. $tableScriptPessoa->addRow()->addCell($script);
  122. //*****************************************************************
  123. // scripts letra maiscula na descricao
  124. $script = new TElement('script');
  125. $script->type = 'text/javascript';
  126. $javascript = "
  127. $('#razao_social').keyup(function(event){
  128. $(this).val($(this).val().toUpperCase());
  129. });
  130. $('#nome_fantasia').keyup(function(event){
  131. $(this).val($(this).val().toUpperCase());
  132. });
  133. $('#estado').keyup(function(event){
  134. $(this).val($(this).val().toUpperCase());
  135. });
  136. $('#complemento').keyup(function(event){
  137. $(this).val($(this).val().toUpperCase());
  138. });
  139. $('#bairro').keyup(function(event){
  140. $(this).val($(this).val().toUpperCase());
  141. });
  142. $('#cidade').keyup(function(event){
  143. $(this).val($(this).val().toUpperCase());
  144. });
  145. ";
  146. $script->add($javascript);
  147. $tableScript = new TTable;
  148. $tableScript->addRow()->addCell($script);
  149. //******************************************************************
  150. // validacoes
  151. $razao_social->addValidation('Razão social', new TRequiredValidator);
  152. $nome_fantasia->addValidation('Nome', new TRequiredValidator);
  153. $cpf_cnpj->addValidation('CPF/CNPJ', new TRequiredValidator);
  154. $situacao->addValidation('Situação', new TRequiredValidator);
  155. #+------------------------------------------------------------------
  156. #| Buscar cep e popular os campos
  157. #+------------------------------------------------------------------
  158. $buscaCep = new TAction(array($this, 'onCep'));
  159. $cep->setExitAction($buscaCep);
  160. #+FIM---------------------------------------------------------------
  161. #+------------------------------------------------------------------
  162. #| Validar CPF/CNPJ
  163. #+------------------------------------------------------------------
  164. $validarCpf = new TAction(array($this,'onValidaCpfCnpj'));
  165. $cpf_cnpj->setExitAction($validarCpf);
  166. //**** FIM DEFINICAO E CONFIG DOS CAMPO PANEL PRINCIPAL *************
  167. $div_container = MGUtil::div('ui-fluid');
  168. //$div_panel = MGUtil::div('col-lg-12');
  169. // adiciona um linha
  170. // $lb = MGUtil::row();
  171. // $lb->add(MGUtil::space());
  172. // $div_panel->add($lb);
  173. //
  174. // $div_panel->add(MGUtil::row());
  175. // $div_panel->add(MGUtil::row());
  176. //
  177. // 1 linha
  178. $r1 = MGUtil::row();
  179. $div_lbl_id = MGUtil::div('col-lg-1',new TLabel('Código'));
  180. $div_lbl_id->add(MGUtil::br());
  181. $div_lbl_id->add($id);
  182. $r1->add($div_lbl_id);
  183. # cor campo obrigatorio
  184. $verm_bold = 'color: red; font-weight:bold;';
  185. // razao social
  186. $lbl_razao_social = new TLabel('Razão Social (*)');
  187. $lbl_razao_social->style = $verm_bold;
  188. $div_lbl_razao = MGUtil::div('col-lg-3', $lbl_razao_social);
  189. $div_lbl_razao->add(MGUtil::br());
  190. $div_lbl_razao->add($razao_social);
  191. $r1->add($div_lbl_razao);
  192. // nome fantasia
  193. $lbl_nome = new TLabel('Nome Fantasia (*)');
  194. $lbl_nome->style = $verm_bold;
  195. $div_lbl_nome = MGUtil::div('col-lg-3', $lbl_nome);
  196. $div_lbl_nome->add(MGUtil::br());
  197. $div_lbl_nome->add($nome_fantasia);
  198. $r1->add($div_lbl_nome);
  199. # apelido
  200. $lbl_apelido = new TLabel('Apelido (*)');
  201. $lbl_apelido->style = 'color:red; font-weight:bold;';
  202. $div_lbl_apelido = MGUtil::div('col-lg-1',$lbl_apelido);
  203. $div_lbl_apelido->add(MGUtil::br());
  204. $div_lbl_apelido->add($apelido_id);
  205. $r1->add($div_lbl_apelido);
  206. # nome_apelido
  207. $div_nome_apelido = MGUtil::div('col-lg-2', new TLabel('Descrição'));
  208. $div_nome_apelido->add(MGUtil::br());
  209. $div_nome_apelido->add($nome_apelido);
  210. $r1->add($div_nome_apelido);
  211. # linha 6 documentos
  212. $r6 = MGUtil::row();
  213. $r6->add(MGUtil::br());
  214. // Tipo de Pessoa
  215. $div_lbl_tipo_pessoa = MGUtil::div('col-lg-1',new TLabel('Tipo Pessoa'));
  216. $div_lbl_tipo_pessoa->add(MGUtil::br());
  217. $div_lbl_tipo_pessoa->add($tipo_pessoa_id);
  218. $r6->add($div_lbl_tipo_pessoa);
  219. // CPF CNPJ
  220. $lbl_cpf = new TLabel('CPF/CNPJ (*)');
  221. $lbl_cpf->style = $verm_bold;
  222. $div_cpf = MGUtil::div('col-lg-2', $lbl_cpf);
  223. $div_cpf->add(MGUtil::br());
  224. $div_cpf->add($cpf_cnpj);
  225. $r6->add($div_cpf);
  226. // ie
  227. $div_ie = MGUtil::div('col-lg-2', new TLabel('IE'));
  228. $div_ie->add(MGUtil::br());
  229. $div_ie->add($ie);
  230. $r6->add($div_ie);
  231. # segmento
  232. $div_lbl_segmento = MGUtil::div('col-lg-2',new TLabel('Segmento'));
  233. $div_lbl_segmento->add(MGUtil::br());
  234. $div_lbl_segmento->add($segmento_id);
  235. $r6->add($div_lbl_segmento);
  236. // linha 2
  237. $r2 = MGUtil::row();
  238. $r2->add(MGUtil::br());
  239. // CEP
  240. $div_cep = MGUtil::div('col-lg-1',new TLabel('CEP'));
  241. $div_cep->add(MGUtil::br());
  242. $div_cep->add($cep);
  243. $r2->add($div_cep);
  244. // logradouro
  245. $div_logra = MGUtil::div('col-lg-4', new TLabel('Logradouro'));
  246. $div_logra->add(MGUtil::br());
  247. $div_logra->add($logradouro);
  248. $r2->add($div_logra);
  249. // numero
  250. //$div_numero = MGUtil::div('col-lg-1', new TLabel('Número'));
  251. //$div_numero->add(MGUtil::br());
  252. //$div_numero->add($numero);
  253. //$r2->add($div_numero);
  254. // complemento
  255. $div_comp = MGUtil::div('col-lg-4', new TLabel('Complemento'));
  256. $div_comp->add(MGUtil::br());
  257. $div_comp->add($complemento);
  258. $r2->add($div_comp);
  259. // linha 3
  260. $r3 = MGUtil::row();
  261. $r3->add(MGUtil::br());
  262. // bairro
  263. $div_bairro = MGUtil::div('col-lg-5', new TLabel('Bairro'));
  264. $div_bairro->add(MGUtil::br());
  265. $div_bairro->add($bairro);
  266. $r3->add($div_bairro);
  267. // cidade
  268. $div_cidade = MGUtil::div('col-lg-5', new TLabel('Cidade'));
  269. $div_cidade->add(MGUtil::br());
  270. $div_cidade->add($cidade);
  271. $r3->add($div_cidade);
  272. // estado
  273. $div_estado = MGUtil::div('col-lg-1', new TLabel('UF'));
  274. $div_estado->add(MGUtil::br());
  275. $div_estado->add($estado);
  276. $r3->add($div_estado);
  277. // linha 4
  278. $r4 = MGUtil::row();
  279. $r4->add(MGUtil::br());
  280. # boleto
  281. $div_boleto = MGUtil::div('col-lg-1',new TLabel('Boleto'));
  282. $div_boleto->add(MGUtil::br());
  283. $div_boleto->add($boleto);
  284. $r4->add($div_boleto);
  285. # pedido de compra
  286. $div_pedido_compra = MGUtil::div('col-lg-2',new TLabel('Pedido de Compra'));
  287. $div_pedido_compra->add(MGUtil::br());
  288. $div_pedido_compra->add($pedidocompra);
  289. $r4->add($div_pedido_compra);
  290. # prazo pagto
  291. $div_prazo_pagto = MGUtil::div('col-lg-3', new TLabel('Prazo de Pagamento'));
  292. $div_prazo_pagto->add(MGUtil::br());
  293. $div_prazo_pagto->add($prazopagto);
  294. $r4->add($div_prazo_pagto);
  295. # regrafaturamento
  296. $div_regra = MGUtil::div('col-lg-5',new TLabel('Regra de Faturamento'));
  297. $div_regra->add(MGUtil::br());
  298. $div_regra->add($regrafaturamento);
  299. $r4->add($div_regra);
  300. # situacao
  301. $lbl_situacao = new TLabel('Situação (*)');
  302. $lbl_situacao->style = 'color:red; font-weight:bold;';
  303. $div_situacao = MGUtil::div('col-lg-1', $lbl_situacao);
  304. $div_situacao->add(MGUtil::br());
  305. $div_situacao->add($situacao);
  306. $r4->add($div_situacao);
  307. # linha 5
  308. $r5 = MGUtil::row();
  309. $r5->add(MGUtil::br());
  310. # obs
  311. $div_obs = MGUtil::div('col-lg-6', new TLabel('Observação'));
  312. $div_obs->add(MGUtil::br());
  313. $div_obs->add($observacao);
  314. $r5->add($div_obs);
  315. # obervacaofaturamento
  316. $div_obs_fat = MGUtil::div('col-lg-6', new TLabel('Observação de Faturamento'));
  317. $div_obs_fat->add(MGUtil::br());
  318. $div_obs_fat->add($observacaofaturamento);
  319. $r5->add($div_obs_fat);
  320. // adiciona a panel
  321. // $div_panel->add($r1);
  322. // $div_panel->add($r6);
  323. // $div_panel->add($r2);
  324. // $div_panel->add($r3);
  325. // $div_panel->add($r4);
  326. // $div_panel->add($r5);
  327. //
  328. // botoes
  329. $button_save = new TButton('action1');
  330. $button_save->setAction(new TAction(array($this,'onSavePrincipal')),_t('Save'));
  331. $button_save->setImage('ico_save.png');
  332. $button_voltar = new TButton('action2');
  333. $button_voltar->setAction(new TAction(array('ClientesList','onReload',)),'Cancelar');
  334. $button_voltar->setImage('ico_close.png');
  335. $r6 = MGUtil::row();
  336. $div_bot = MGUtil::div('col-lg-12');
  337. $div_bot->style = 'background-color: #EFEFEF';
  338. $div_bot->add($button_save);
  339. $div_bot->add($button_voltar);
  340. $r6->add($div_bot);
  341. $div_container->add($r1);
  342. $div_container->add($r6);
  343. $div_container->add($r2);
  344. $div_container->add($r3);
  345. $div_container->add($r4);
  346. $div_container->add($r5);
  347. $div_container->add($r6);
  348. // adiciona as linha na div
  349. //$div_container->add($div_panel);
  350. // adiciona a div na tabela
  351. $row = $table_principal->addRow();
  352. $row->addCell($div_container);
  353. // adiciona a aba
  354. $this->notebook->appendPage('Dados Principais',$table_principal);
  355. $this->notebook->appendPage('Documentos',$table_documentos);
  356. //*******FIM DO PANEL PRINCIPAL ***********************************
  357. /*
  358. #+---------------------------------------------------------------------
  359. #| Aba Documentos
  360. #+---------------------------------------------------------------------
  361. $div_pnl_doc = MGUtil::div('panel panel-default');
  362. $div_pnl_head = MGUtil::div('panel-heading');
  363. $div_pnl_body = MGUtil::div('pane-body');
  364. $lbl_heading = new TLabel('Documentos');
  365. $lbl_heading->style = 'font-size: 16px; font-weight: bold;';
  366. $div_pnl_head->add($lbl_heading);
  367. $div_pnl_doc->add($div_pnl_head);
  368. # campos
  369. $file = new TFile('file');
  370. $descricao_file = new TEntry('descricao_file');
  371. $this->datagrid_doc = new TDataGrid;
  372. $col_id = new TDataGridColumn('id','#ID','center');
  373. $col_descricao = new TDataGridColumn('descricao','Descrição','left');
  374. $col_nome_doc = new TDataGridColumn('nomedocumento','Nome Documento','left');
  375. $col_login = new TDataGridColumn('login','Enviado Por','left');
  376. $col_data = new TDataGridColumn('updated_at','Em','center');
  377. $this->datagrid_doc->addColumn($col_id);
  378. $this->datagrid_doc->addColumn($col_descricao);
  379. $this->datagrid_doc->addColumn($col_nome_doc);
  380. $this->datagrid_doc->addColumn($col_login);
  381. $this->datagrid_doc->addColumn($col_data);
  382. $this->datagrid_doc->disableDefaultClick();
  383. $this->datagrid_doc->datatable = 'true';
  384. // create the page navigation
  385. $this->pageNavigation = new TPageNavigation;
  386. $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
  387. $this->pageNavigation->setWidth($this->datagrid_doc->getWidth());
  388. $col_data->setTransformer(function($value, $object, $row){
  389. $data = new DateTime($value);
  390. return $data->format('d/m/Y H:m:s');
  391. });
  392. // creates two datagrid actions
  393. $action1 = new TDataGridAction(array($this, 'onDownload'));
  394. $action1->setLabel('Download');
  395. $action1->setImage('ico_down.png');
  396. $action1->setField('id');
  397. $this->datagrid_doc->addAction($action1);
  398. // creates two datagrid actions
  399. $action1 = new TDataGridAction(array($this, 'onDeleteDocumento'));
  400. $action1->setLabel('Apagar');
  401. $action1->setImage('ico_delete.png');
  402. $action1->setField('id');
  403. $this->datagrid_doc->addAction($action1);
  404. # cria o modelo
  405. $this->datagrid_doc->createModel();
  406. # config campos
  407. $file->setSize('100%');
  408. $descricao_file->setSize('100%');
  409. # linha 1
  410. $rf1 = MGUtil::row();
  411. $div_file = MGUtil::div('col-lg-3',new TLabel('Documento'));
  412. $div_file->add(MGUtil::br());
  413. $div_file->add($file);
  414. $rf1->add($div_file);
  415. # descricao
  416. $lbl_descricao_file = new TLabel('Descrição (*)');
  417. $lbl_descricao_file->style = 'color:red; font-weigh:bold;';
  418. $div_descricao_file = MGUtil::div('col-lg-4',$lbl_descricao_file);
  419. $div_descricao_file->add(MGUtil::br());
  420. $div_descricao_file->add($descricao_file);
  421. $rf1->add($div_descricao_file);
  422. # add data grid
  423. $rf2 = MGUtil::row();
  424. $lbl_doc = new TLabel('Lista de Documentos;');
  425. $div_doc = MGUtil::div('col-lg-12', $lbl_doc);
  426. $div_doc->add(MGUtil::br());
  427. $div_doc->add($this->datagrid_doc);
  428. $rf2->add($div_doc);
  429. $rf2->add($this->pageNavigation);
  430. # button enviar
  431. $rf3 = MGUtil::row();
  432. $div_btn_enviar = MGUtil::div('col-lg-1');
  433. $action_enviar = new TAction(array($this, 'onSavePrincipal'));
  434. $btn_enviar = new TButton('btn_upload');
  435. $btn_enviar->setAction($action_enviar,'Salvar');
  436. $btn_enviar->setImage('ico_save.png');
  437. $div_btn_enviar->add($btn_enviar);
  438. $rf3->add($div_btn_enviar);
  439. # adiciona a linha ao container2
  440. $div_pnl_body->add($rf1);
  441. $div_pnl_body->add($rf2);
  442. $div_pnl_body->add(MGUtil::br());
  443. $div_pnl_body->add($rf3);
  444. # adiciona o container 2
  445. $div_pnl_doc->add($div_pnl_body);
  446. $table_documentos->add($div_pnl_doc);
  447. */
  448. // add fields
  449. $this->form->setFields(array($button_save, $id, $razao_social, $nome_fantasia, $cep,
  450. $logradouro,$numero,$complemento, $cidade, $estado, $cpf_cnpj,
  451. $tipo_pessoa_id, $ie, $boleto, $pedidocompra, $prazopagto,
  452. $button_voltar, $regrafaturamento, $observacao, $apelido_id,
  453. $nome_apelido, $segmento_id, $bairro, $situacao,
  454. $observacaofaturamento ));
  455. // adiciona os dados na pagina
  456. $vbox = new TVBox;
  457. $vbox->style = 'width: 100%';
  458. $vbox->add($tableScriptPessoa);
  459. $vbox->add($tableScript);
  460. $vbox->add($this->form);
  461. parent::add($vbox);
  462. }
  463. ?

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


LC

Nessa linha 66 tem um ">
$apelido_id = new ">TDBSeekButton
MG

Não sei como foi aparecer aí, no código original não tem!
NR

O código do construct parece estar correto. Talvez o problema esteja na classe MGUtil, pois se reparar, os labels estão aparecendo duplicados também(CódigoCódigo, por exemplo), o que significa que o método show deles está sendo chamado mais de uma vez
MG

Outro detalhe que observei, o notebook também está duplicado.
Vou rever este form, obrigado.