Manipulação de janelas modais Como posso chamar uma janela modal que tem um formulário de busca, sem que ao abrir eu feche a modal anterior?...
G
Manipulação de janelas modais  
Como posso chamar uma janela modal que tem um formulário de busca, sem que ao abrir eu feche a modal anterior?

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


HD

Bom dia!

Você pode trabalhar com TWindow. Tem a possibilidade de trabalhar com múltiplas.
G

Bom Dia!

Já estou usando a classe estendendo da classe TWindow, mas quando eu abro o modal que eu preciso, ele continua fechando o modal anterior
HD

Então.. para cada nova janela aberta... é um novo objeto! Ex:

 
  1. <?php
  2. $window1 = TWindow::create('Window 1', 0.5, 0.5);
  3. $window1->show();
  4. $window2 = TWindow::create('Window 2', 0.5, 0.8);
  5. $window2->show();
  6. ?>

G

Nesse caso funcionaria caso eu tenha um botão que chame outro formulário modal?
G

Nesse caso funcionaria caso eu tenha um botão que chame outro formulário modal?
HD

Exatamente... pode fazer a chamada do Modal via botão.
G

Testei aqui e no meu caso, como que eu faria pra chamar o novo modal dentro da actiond do botão?

segue codigo da criação do botão
<php
$button = new TButton('abrir');
$button->setAction(new TAction(array('SeekCliente','onReload'),array('form'=>'form_TituloCrHdr'
,'form_TituloCrHdr'.'cliente_id_aux'=>'cliente->nome_cliente'
,'form_TituloCrHdr'.'cliente_id'=>'cliente->cod_cliente'
,'form_TituloCrHdr'.'cliente_end_id'=>'cliente_end_id')));
$button->setImage('fa:search');
$button->{'class'} = 'btn btn-default tseekbutton';
$button->{'type'} = 'button';
$button->{'onmouseover'} = "style.cursor = 'pointer'";
$button->{'onmouseout'} = "style.cursor = 'default'";

?>
G

Testei aqui e no meu caso, como que eu faria pra chamar o novo modal dentro da actiond do botão?

segue codigo da criação do botão
 
  1. <?php
  2. $button = new TButton('abrir');
  3. $button->setAction(new TAction(array('SeekCliente','onReload'),array('form'=>'form_TituloCrHdr'
  4. ,'form_TituloCrHdr'.'cliente_id_aux'=>'cliente->nome_cliente'
  5. ,'form_TituloCrHdr'.'cliente_id'=>'cliente->cod_cliente'
  6. ,'form_TituloCrHdr'.'cliente_end_id'=>'cliente_end_id')));
  7. $button->setImage('fa:search');
  8. $button->{'class'} = 'btn btn-default tseekbutton';
  9. $button->{'type'} = 'button';
  10. $button->{'onmouseover'} = "style.cursor = 'pointer'";
  11. $button->{'onmouseout'} = "style.cursor = 'default'";
  12. ?>
HD

Você vai precisar de uma função estática para abrir a nova janela... no seu caso, você está chamando o onReload... provavelmente não irá funcionar.

Tenta essa lógica:

 
  1. <?php
  2. // aqui você define a ação/botão
  3. $action = new TAction( [__CLASS__, 'newWindow' ], $param );
  4. $button = new TActionLink('Abrir Janela', $action, 'white', 10, '', 'far:check-square #FEFF00');
  5. $button->class='btn btn-success';
  6. // função para abrir o modal
  7. public static function newWindow( $param )
  8. {
  9. // inicia formulário da nova janela
  10. $myForm = new BootstrapFormBuilder;
  11. // aqui você implementa os campos e ações do formulário
  12. // cria a nova janela - add o form - renderiza
  13. $window = TWindow::create('New Window', 0.5, 0.8);
  14. $window->add($myForm);
  15. $window->show();
  16. }
  17. ?>
G

Bom Dia Hélquisson,tudo bom?
Testei da forma como você disse e não tive sucesso, sempre que eu abro a janela, a janela de traz fecha.
Fazendo com o código que vc me mostrou, não consigo atribuir um formulário dentro dessa janela
HD

Olá... posta o código pra gente tentar resolver.
G

Aqui é a onde chamo o formulário. Classe fcadTituloCrHdr extends Twindow

 
  1. <?php
  2. // função para abrir o modal
  3. public static function buscaCliente($param)
  4. {
  5. $formulario = new SeekCliente();
  6. $window = TWindow::create('Teste', 0.5,0.8,'hide');
  7. $window->add($formulario);
  8. $window->show();
  9. }
  10. ?>

Funções que faz as duas abas fecharem

 
  1. <?php
  2. public function onReload($param = NULL)
  3. {
  4. try
  5. {
  6. //TSession::setValue('SeekCliente_campo', 'form_TituloCrHdr');
  7. // open a transaction with database 'samples'
  8. TTransaction::open('sgidb');
  9. // creates a repository for City
  10. $repository = new TRepository('ClienteEnd');
  11. $limit = 10;
  12. // default order
  13. if (!isset($param['order']))
  14. {
  15. $param['order'] = 'cliente_id';
  16. $param['direction'] = 'asc';
  17. }
  18. //$criteria->setProperties($param); // order, offset
  19. //$criteria->setProperty('limit', $limit);
  20. $teste =TSession::getValue(__CLASS__.'_descr');
  21. if ($teste<>'0')
  22. {
  23. // creates a filter using what the user has typed
  24. $filter = new TCriteria();
  25. $filter->add(new TFilter('cpf', '=', TSession::getValue(__CLASS__.'_descr')), TExpression::OR_OPERATOR);
  26. $filter->add(new TFilter('cnpj', '=', TSession::getValue(__CLASS__.'_descr')), TExpression::OR_OPERATOR);
  27. $filter->add(new TFilter('descr', 'like', TFormata::formatStrBusca(TSession::getValue(__CLASS__.'_descr'))), TExpression::OR_OPERATOR);
  28. $filter->add(new TFilter('cliente_id', 'in', '(select c.cliente_id
  29. from cliente c
  30. where c.nome_cliente like \''.TFormata::formatStrBusca(TSession::getValue(__CLASS__.'_descr')).'\')'), TExpression::OR_OPERATOR);
  31. $filter->add(new TFilter('cliente_id', 'in', '(select c.cliente_id
  32. from cliente c
  33. where c.nome_curto like \''.TFormata::formatStrBusca(TSession::getValue(__CLASS__.'_descr')).'\')'), TExpression::OR_OPERATOR);
  34. }
  35. // load the objects according to the criteria
  36. $clientes = $repository->load($filter);
  37. if ($clientes)
  38. {
  39. foreach ($clientes as $cliente)
  40. {
  41. // add the object inside the datagrid
  42. $this->datagrid->addItem($cliente);
  43. }
  44. }
  45. // default order
  46. if (isset($param['form']))
  47. {
  48. $array = array();
  49. $form = $param['form'];
  50. array_push($array,$form);
  51. foreach ($param as $key => $value)
  52. {
  53. if($form == substr($key,0,strlen($form)))
  54. {
  55. array_push($array,substr($key,strlen($form))."#".$value);
  56. }
  57. }
  58. $str = implode("|",$array) ;
  59. $teste = new stdClass;
  60. $teste->array = $str;
  61. TSession::setValue(__CLASS__.'_campo',$str);
  62. TForm::sendData('form_seek_cliente',$teste);
  63. }
  64. // reset the criteria for record count
  65. $filter->resetProperties();
  66. $count= $repository->count($filter);
  67. $this->pageNavigation->setCount($count); // count of records
  68. $this->pageNavigation->setProperties($param); // order, page
  69. $this->pageNavigation->setLimit($limit); // limit
  70. $this->loaded = true;
  71. // close the transaction
  72. TTransaction::close();
  73. }
  74. catch (Exception $e) // in case of exception
  75. {
  76. // shows the exception error message
  77. new TMessage('error', $e->getMessage());
  78. // undo all pending operations
  79. TTransaction::rollback();
  80. }
  81. }
  82. ?>

 
  1. <?php
  2. public function onSelect($param)
  3. {
  4. try
  5. {
  6. $key = $param['key'];
  7. TTransaction::open('sgidb');
  8. // load the active record
  9. $cliente = new ClienteEnd($key);
  10. // closes the transaction
  11. $array = explode("|",TSession::getValue(__CLASS__.'_campo'));
  12. $form = $array[0];
  13. $object = new StdClass;
  14. for ($i=1; $i < count($array); $i++)
  15. {
  16. list($campo, $valor) = explode("#",$array[$i]);
  17. eval("\$object->\$campo = \$cliente->\$valor;");
  18. }
  19. TForm::sendData($form, $object);
  20. TTransaction::close();
  21. parent::closeWindow(); // closes the window
  22. }
  23. catch (Exception $e) // em caso de exceção
  24. {
  25. // clear fields
  26. $object = new StdClass;
  27. $object->cliente_id = ' ';
  28. TForm::sendData($param['form'], $object);
  29. // undo pending operations
  30. TTransaction::rollback();
  31. }
  32. }
  33. ?>
HD

Certo... então vamos lá... na sua classe principal você faz um extends com TWindow... na chamada da nova janela, eu vi que você provavelmente trabalha com um Seek Button (SeekCliente)... quando você clica no botão de busca da nova janela... a classe TStandardSeek é acionada... porém ela também faz um extends com TWindow... até aí as janelas estão intactas... na hora que você seleciona a opção da SeekCliente, um parent::closeWindow() é acionado matando suas janelas.

No seu onSelect... comenta a linha parent::closeWindow(); // closes the window! e roda novamente.
G

Então no caso, a classe SeekCliente estende da TWindow tbm, pode ser por isso que ta dando duplicidade?
HD

Bom dia...

Então... o TWindow em si não é problema... o método 'onSelect' da TStandardSeek que mata as janelas... talvez, na chamada da do TSeekButton você pode setar uma action para um método personalizado... faz o teste aí.
G

Bom Dia..

Eu consegui resolver o problema, na minha classe de cadastro eu não estendi ela da TWindow, mas criei uma window e adicionei o formulario, dessa forma, o formulário não se fecha quando abro outra janela modal em cima..

Agradeço sua ajuda, foi muito boa
HD

Que bom... show de bola.