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:
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
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.
PÁGINA ÚNICA QUE FUNCIONA PERFEITAMENTE:
- <?php
- class teste3 extends TPage
- {
- private $form;
- private $datagrid;
-
- public function __construct()
- {
- parent::__construct();
-
- $this->form = new TForm('form');
-
- $this->datagrid = new TDataGrid;
- $this->datagrid->disableDefaultClick(); // important!
-
- $this->datagrid->addColumn( new TDataGridColumn('check', 'Check', 'right', '5%') );
- $this->datagrid->addColumn( new TDataGridColumn('code', 'Code', 'right', '10%') );
- $this->datagrid->addColumn( new TDataGridColumn('name', 'Name', 'left', '50%') );
- $this->datagrid->addColumn( new TDataGridColumn('key', 'KEY', 'left', '50%') );
-
- $this->datagrid->createModel();
-
- $button = TButton::create('action1', [$this, 'onSave'], 'Save', 'fa:save green');
- $this->form->addField($button);
-
- $this->form->add($this->datagrid);
- $this->form->add($button);
- parent::add($this->form);
- }
-
- function onReload($param) {
- $this->datagrid->clear();
- $key = 4;
-
- for($i = 1; $i < 5; $i++){ //Carregando a DataGrid de forma MANUAL
- $item = new StdClass;
- $item->check = new TCheckButton('check'.$i);
- $item->check->setIndexValue('on');
- $item->code = $i;
- $item->name = 'nome'.$i;
- $item->key = $key;
- $this->datagrid->addItem($item);
- $this->form->addField($item->check); // important!
- }//*/
- }
-
- public function onSave($param)
- {
- $data = $this->form->getData();
- $this->form->setData($data);
-
- $message = 'Check 1 : ' . $data->check1 . '<br>';
- $message.= 'Check 2 : ' . $data->check2 . '<br>';
- $message.= 'Check 3 : ' . $data->check3 . '<br>';
- $message.= 'Check 4 : ' . $data->check4 . '<br>';
-
- new TMessage('info', $message);
- }
-
- function show()
- {
- $this->onReload( func_get_args() );
- parent::show();
- }
- }
- ?>
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
- <?php
- class teste2 extends TPage{
-
- public function __construct(){
- parent::__construct();
-
- $id = 4;
-
- $form = new TForm('form');
- $button = TButton::create('btn', ['teste1', 'onReload'], 'Save', 'fa:save green');
-
- $actionButton = $button->getAction();
- $actionButton->setParameter('key', $id);
-
- $form->addField($button);
- $form->add($button);
-
- parent::add($form);
- }
- }
- ?>
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.
- <?php
- class teste1 extends TPage{
- private $form;
- private $datagrid;
-
- public function __construct(){
- parent::__construct();
-
- $this->form = new TForm('form');
-
- $this->datagrid = new TDataGrid;
- $this->datagrid->disableDefaultClick(); // importante!
-
- $this->datagrid->addColumn( new TDataGridColumn('check', 'Check', 'right', '5%') );
- $this->datagrid->addColumn( new TDataGridColumn('code', 'Code', 'right', '10%') );
- $this->datagrid->addColumn( new TDataGridColumn('name', 'Name', 'left', '50%') );
- $this->datagrid->addColumn( new TDataGridColumn('key', 'KEY', 'left', '50%') );
-
- $this->datagrid->createModel();
-
- $button = TButton::create('action1', [$this, 'onSave'], 'Save', 'fa:save green');
- $this->form->addField($button);
-
- $this->form->add($this->datagrid);
- $this->form->add($button);
- parent::add($this->form);
- }
-
- function onReload($param) {
-
- if ( isset($param['key']) ){
- $key = $param['key'];
- echo 'A chave é: '. $key;
-
- $this->datagrid->clear();
-
- for($i = 1; $i < 5; $i++){ //Carregando a DataGrid de forma MANUAL
- $item = new StdClass;
- $item->check = new TCheckButton('check'.$i);
- $item->check->setIndexValue('on');
- $item->code = $i;
- $item->name = 'nome'.$i;
- $item->key = $key;
- $this->datagrid->addItem($item);
- $this->form->addField($item->check); // importante!
- }
- }
- }
-
- public function onSave($param){
- $data = $this->form->getData();
- $this->form->setData($data);
-
- $message = 'Check 1 : ' . $data->check1 . '<br>';
- $message.= 'Check 2 : ' . $data->check2 . '<br>';
- $message.= 'Check 3 : ' . $data->check3 . '<br>';
- $message.= 'Check 4 : ' . $data->check4 . '<br>';
-
- new TMessage('info', $message);
- }
-
- function show(){
- $this->onReload( func_get_args() );
- parent::show();
- }
- }
- ?>
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:
Obrigado Nataniel