Problema chamar janela pela cortina lateral Tem dias que estou apanhando para algo que creio ser simples. Tenho uma listagem que abre normal, na tela toda(TPage). Ao clicar em um item dessa página, é aberto uma cortina lateral com alguns dados. Até aí tudo bem. O problema que tenho uma action nessa cortina que chama uma classe do tipo TWindow. Quando clico no botão abre normalmente a janela, porém fecha a cortina lateral. Já tent...
RX
Problema chamar janela pela cortina lateral  
Tem dias que estou apanhando para algo que creio ser simples.

Tenho uma listagem que abre normal, na tela toda(TPage). Ao clicar em um item dessa página, é aberto uma cortina lateral com alguns dados. Até aí tudo bem. O problema que tenho uma action nessa cortina que chama uma classe do tipo TWindow. Quando clico no botão abre normalmente a janela, porém fecha a cortina lateral.
Já tentei sem utilizar a cortina, ou seja, abrir um janela, e dentro da janela chamar a próxima janela. Acontece a mesma coisa, a de baixo é fechada.

Ajudem-me por favor.

Grato,
Rafael Ximenes

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


MA

Bom dia, você precisa criar um componente, não irei criar completo pela a falta de tempo, mas dentro de libwidgets da app tem exemplo pra você criar seus próprios componentes.
De maneira grosseira de organização de codigos você pode criar algo asssim

 
  1. <?php
  2. /**
  3. * Class TSignaturePad
  4. * @author Marcelo Alves
  5. * 5/31/20 11:43 AM
  6. */
  7. use Adianti\Widget\Base\TElement;
  8. use Adianti\Widget\Form\AdiantiWidgetInterface;
  9. use Adianti\Widget\Form\TField;
  10. class TSignaturePad extends TField implements AdiantiWidgetInterface
  11. {
  12. protected $id;
  13. protected $formName;
  14. protected $size;
  15. protected $height;
  16. /**
  17. * Class Constructor
  18. * @param $name Widet's name
  19. */
  20. public function __construct($name)
  21. {
  22. parent::__construct($name);
  23. $this->id = 'signature-pad'; // . mt_rand(1000000000, 1999999999);
  24. // creates a <canvas> tag
  25. $this->tag = new TElement('canvas');
  26. $this->tag->{'class'} = 'signature-pad'; // CSS
  27. $this->tag->{'widget'} = 'signature_pad';
  28. // defines the text default height
  29. $this->width = 400;
  30. $this->height = 200;
  31. echo "<style>
  32. .wrapper-signature-pad {
  33. position: relative;
  34. width: 400px;
  35. height: 200px;
  36. -moz-user-select: none;
  37. -webkit-user-select: none;
  38. -ms-user-select: none;
  39. user-select: none;
  40. }
  41. .signature-pad {
  42. position: absolute;
  43. left: 0;
  44. top: 0;
  45. width:400px;
  46. height:200px;
  47. }
  48. </style>";
  49. }
  50. /**
  51. * Define the widget's size
  52. * @param $width Widget's width
  53. * @param $height Widget's height
  54. */
  55. public function setSize($width, $height = NULL)
  56. {
  57. $this->size = $width;
  58. if ($height) {
  59. $this->height = $height;
  60. }
  61. }
  62. /**
  63. * Returns the size
  64. * @return array(width, height)
  65. */
  66. public function getSize()
  67. {
  68. return array($this->size, $this->height);
  69. }
  70. /**
  71. * Show the widget
  72. */
  73. public function show()
  74. {
  75. $this->tag->{'name'} = $this->name;
  76. if ($this->size) {
  77. $size = (strstr($this->size, '%') !== FALSE) ? $this->size : "{$this->size}px";
  78. $this->setProperty('style', "width:{$size};", FALSE);
  79. }
  80. if ($this->height) {
  81. $height = (strstr($this->height, '%') !== FALSE) ? $this->height : "{$this->height}px";
  82. $this->setProperty('style', "height:{$height}", FALSE);
  83. }
  84. if ($this->id and empty($this->tag->{'id'})) {
  85. $this->tag->{'id'} = $this->id;
  86. }
  87. $container = TElement::tag("div", $this->tag);
  88. $container->class = "wrapper-signature-pad";
  89. $container->show();
  90. \Adianti\Widget\Base\TScript::create("
  91. var signaturePad = new SignaturePad(document.getElementById('signature-pad'), {
  92. backgroundColor: 'rgba(255, 255, 255, 0)',
  93. penColor: 'rgb(0, 0, 0)'
  94. });
  95. ");
  96. }
  97. }
  98. ?>

Coloquei a biblioteca
https://cdn.jsdelivr.net/npm/signature_pad@3.0.0-beta.3/dist/signature_pad.umd.min.js
nas libs do projeto e obtive o resultado.

Resultado aqui:
https://ibb.co/QD5DmhZ
</canvas>
MA

Ignora meu post respondi o post errado, a ferramenta do forum poderia ter a opção para o criador deletar o post
AC

Boa tarde.

Você pode atribuir ao close action da sua TWindow a abertura da sua lista em cortina lateral. Dessa forma, naturalmente, sua lista fica fechada ao exibir TWindow e, ao fecha-la, a lista aparece novamente.
Espero ter entendido sua dúvida.
RX

Tudo bem Marcelo, sem problemas!

Americo, eu já havia pensado em fazer dessa maneira, mas na maioria dos casos é interessante ou até necessário o usuário estando na TWindow aberta, visualizar algum dado da cortina lateral. Irei aguardar outra solução. De qualquer forma, meu muito obrigado pela dica.
NR

Faça a action da cortina chamar uma função estática dentro da própria classe e aí chame a window:
 
  1. <?php
  2. public static function teste($param)
  3. {
  4. $win = TesteWindowView::create('teste', 0.8, 0.8);
  5. $win->show();
  6. }
  7. ?>
RX

Valeu Nataniel, você é o cara!!

Criei um método static e na chamada lá no action passei "static"=>"1" como parametro.
 
  1. <?php
  2. $this->form->addAction('Abrir', new TAction([$this, 'onAbrir'],["static"=>"1"]), 'fa:search');
  3. public static function onAbrir($param){
  4. $win = AtividadeForm::create('teste', 0.8, 0.8);
  5. $win->show();
  6. }
  7. ?>
DI

Olá,

Inicialmente, o processo de abertura do aplicativo funcionou perfeitamente. No entanto, ao realizar qualquer ação na tela, observo que a cortina localizada abaixo se fecha e uma nova janela pop é aberta.

Gostaria de obter orientação sobre como resolver esse problema específico ao realizar operações como salvar, excluir ou editar. A tela que desenvolvi segue um padrão normal, onde ao criar ou editar um registro, uma cortina é aberta. Da cortina, precisei abrir um arquivo pop para uma formlist. Embora essa transição ocorra corretamente sobre a cortina, ao efetuar operações como gravar, editar ou excluir, a ação é realizada, mas a mesma janela pop é aberta novamente.

Agradeço antecipadamente por qualquer sugestão ou orientação que os mestres possam fornecer para solucionar essa questão.