Problema relacionado com: $actionButton = $button->getAction() Olá pessoal, estou com um problema relacionado com envio de parâmetros por meio de uma action dentro de um botão, para simplificar refiz uma página como exemplo, ilustrando o tal do problema, primeiro vou postar uma única página que está funcionando perfeitamente, logo após vou colocar o código de duas páginas que desejo criar uma certa interação (Uma delas enviar o "id" para a outra m...
LL
Problema relacionado com: $actionButton = $button->getAction()  
Olá pessoal, estou com um problema relacionado com envio de parâmetros por meio de uma action dentro de um botão, para simplificar refiz uma página como exemplo, ilustrando o tal do problema, primeiro vou postar uma única página que está funcionando perfeitamente, logo após vou colocar o código de duas páginas que desejo criar uma certa interação (Uma delas enviar o "id" para a outra mostrar informações relacionadas com esse "id").

PÁGINA ÚNICA QUE FUNCIONA PERFEITAMENTE:

 
  1. <?php
  2. class teste3 extends TPage
  3. {
  4. private $form;
  5. private $datagrid;
  6. public function __construct()
  7. {
  8. parent::__construct();
  9. $this->form = new TForm('form');
  10. $this->datagrid = new TDataGrid;
  11. $this->datagrid->disableDefaultClick(); // important!
  12. $this->datagrid->addColumn( new TDataGridColumn('check', 'Check', 'right', '5%') );
  13. $this->datagrid->addColumn( new TDataGridColumn('code', 'Code', 'right', '10%') );
  14. $this->datagrid->addColumn( new TDataGridColumn('name', 'Name', 'left', '50%') );
  15. $this->datagrid->addColumn( new TDataGridColumn('key', 'KEY', 'left', '50%') );
  16. $this->datagrid->createModel();
  17. $button = TButton::create('action1', [$this, 'onSave'], 'Save', 'fa:save green');
  18. $this->form->addField($button);
  19. $this->form->add($this->datagrid);
  20. $this->form->add($button);
  21. parent::add($this->form);
  22. }
  23. function onReload($param) {
  24. $this->datagrid->clear();
  25. $key = 4;
  26. for($i = 1; $i < 5; $i++){ //Carregando a DataGrid de forma MANUAL
  27. $item = new StdClass;
  28. $item->check = new TCheckButton('check'.$i);
  29. $item->check->setIndexValue('on');
  30. $item->code = $i;
  31. $item->name = 'nome'.$i;
  32. $item->key = $key;
  33. $this->datagrid->addItem($item);
  34. $this->form->addField($item->check); // important!
  35. }//*/
  36. }
  37. public function onSave($param)
  38. {
  39. $data = $this->form->getData();
  40. $this->form->setData($data);
  41. $message = 'Check 1 : ' . $data->check1 . '<br>';
  42. $message.= 'Check 2 : ' . $data->check2 . '<br>';
  43. $message.= 'Check 3 : ' . $data->check3 . '<br>';
  44. $message.= 'Check 4 : ' . $data->check4 . '<br>';
  45. new TMessage('info', $message);
  46. }
  47. function show()
  48. {
  49. $this->onReload( func_get_args() );
  50. parent::show();
  51. }
  52. }
  53. ?>






O que essa página faz:
Simplesmente carrega uma datagrid de forma manual na tela com "TCheckButton"s. O usuário vai marcar os itens que quiser e depois vai clicar sobre o botão "SAVE" que vai exibir a lista dos "Check", mostrando quem foi marcado e quem não foi.

Agora vem o problema, o que eu quero na verdade e enviar um "KEY" de uma página para outra, a outra página ler esse "KEY" e e exibir o resto das informações normalmente (Assim como na página "teste3" que acabei de enviar o código)

Agora as duas páginas que estão apresentando problema:

Essa página (teste2) apenas tem um botão na tela que ao ser pressionado executa a função "onReload" da próxima página (página teste1), ou seja ela mostra o datagrid da página teste1(vou enviar o código) na tela com seus "TCheckButton"s.

PÁGINA TESTE2
 
  1. <?php
  2. class teste2 extends TPage{
  3. public function __construct(){
  4. parent::__construct();
  5. $id = 4;
  6. $form = new TForm('form');
  7. $button = TButton::create('btn', ['teste1', 'onReload'], 'Save', 'fa:save green');
  8. $actionButton = $button->getAction();
  9. $actionButton->setParameter('key', $id);
  10. $form->addField($button);
  11. $form->add($button);
  12. parent::add($form);
  13. }
  14. }
  15. ?>




PÁGINA TESTE1:

Mostra uma DataGrid na tela com botões do tipo Check, onde o usuário pode marca-los e ao pressionar o botão SAVE a lista de checks vão ser mostradas na tela, informando quem foi marcado e quem não foi.

 
  1. <?php
  2. class teste1 extends TPage{
  3. private $form;
  4. private $datagrid;
  5. public function __construct(){
  6. parent::__construct();
  7. $this->form = new TForm('form');
  8. $this->datagrid = new TDataGrid;
  9. $this->datagrid->disableDefaultClick(); // importante!
  10. $this->datagrid->addColumn( new TDataGridColumn('check', 'Check', 'right', '5%') );
  11. $this->datagrid->addColumn( new TDataGridColumn('code', 'Code', 'right', '10%') );
  12. $this->datagrid->addColumn( new TDataGridColumn('name', 'Name', 'left', '50%') );
  13. $this->datagrid->addColumn( new TDataGridColumn('key', 'KEY', 'left', '50%') );
  14. $this->datagrid->createModel();
  15. $button = TButton::create('action1', [$this, 'onSave'], 'Save', 'fa:save green');
  16. $this->form->addField($button);
  17. $this->form->add($this->datagrid);
  18. $this->form->add($button);
  19. parent::add($this->form);
  20. }
  21. function onReload($param) {
  22. if ( isset($param['key']) ){
  23. $key = $param['key'];
  24. echo 'A chave é: '. $key;
  25. $this->datagrid->clear();
  26. for($i = 1; $i < 5; $i++){ //Carregando a DataGrid de forma MANUAL
  27. $item = new StdClass;
  28. $item->check = new TCheckButton('check'.$i);
  29. $item->check->setIndexValue('on');
  30. $item->code = $i;
  31. $item->name = 'nome'.$i;
  32. $item->key = $key;
  33. $this->datagrid->addItem($item);
  34. $this->form->addField($item->check); // importante!
  35. }
  36. }
  37. }
  38. public function onSave($param){
  39. $data = $this->form->getData();
  40. $this->form->setData($data);
  41. $message = 'Check 1 : ' . $data->check1 . '<br>';
  42. $message.= 'Check 2 : ' . $data->check2 . '<br>';
  43. $message.= 'Check 3 : ' . $data->check3 . '<br>';
  44. $message.= 'Check 4 : ' . $data->check4 . '<br>';
  45. new TMessage('info', $message);
  46. }
  47. function show(){
  48. $this->onReload( func_get_args() );
  49. parent::show();
  50. }
  51. }
  52. ?>

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


NR

Na função onSave use a variável $param para recuperar os valores de check1, check2...

Ao usar o $this->form->getData, só serão recuperados os campos registrados com addField no formulário. Acontece que ao clicar no onSave, o if da onReload está retornando false, com isso os campos não são adicionados ao form:
 
  1. <?php
  2. function onReload($param) {
  3. if ( isset($param['key']) ){ // esse if tá retornando falso, com isso os campos não são registrados no form
  4. $key = $param['key'];
  5. ?>
LL

Obrigado Nataniel