Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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 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 (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.50.5);
  3. $window1->show();
  4. $window2 TWindow::create('Window 2'0.50.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.         
  13.         // cria a nova janela - add o form - renderiza
  14.         $window TWindow::create('New Window'0.50.8);
  15.         $window->add($myForm);
  16.         $window->show();
  17. }
  18. ?>
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.         
  7.         $window =  TWindow::create('Teste'0.5,0.8,'hide');
  8.         
  9.         $window->add($formulario);
  10.         
  11.         $window->show();
  12.         
  13.         
  14.     }    
  15. ?>

Funções que faz as duas abas fecharem

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

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