EN
TStandartList - Comportamento do Filtro "salvo"
Boa noite,
Estou com um comportamento considerado estranho (pelo menos para mim) e quero saber se tem como contornar. Executo um filtro, ele me traz os registros, saio deste grid para de outra tabela, volto para ele e o formulario continua com o conteudo do filtro quando usei a tela primeira vez. Para contornar isso coloquei $this->form->Clear(); até ai tudo bem, mas o grid continua filtrado até que o usuario clique em filtrar com o form em branco.
Como arrumo isso?
Estou com um comportamento considerado estranho (pelo menos para mim) e quero saber se tem como contornar. Executo um filtro, ele me traz os registros, saio deste grid para de outra tabela, volto para ele e o formulario continua com o conteudo do filtro quando usei a tela primeira vez. Para contornar isso coloquei $this->form->Clear(); até ai tudo bem, mas o grid continua filtrado até que o usuario clique em filtrar com o form em branco.
Como arrumo isso?
- <?php
- class ClientesViewList extends TStandardList
- {
- protected $form; // registration form
- protected $datagrid; // listing
- protected $pageNavigation;
- protected $formgrid;
- protected $deleteButton;
- protected $transformCallback;
- /**
- * Page constructor
- */
- public function __construct()
- {
- parent::__construct();
- parent::setDatabase('clientes'); // defines the database
- parent::setActiveRecord('Clientes'); // defines the active record
- parent::setDefaultOrder('id', 'asc'); // defines the default order
- // parent::setCriteria($criteria) // define a standard filter
- parent::addFilterField('nome', 'like', 'nome'); // filterField, operator, formField
- parent::addFilterField('aniversario', '=', 'aniversario'); // filterField, operator, formField
- parent::addFilterField('telefone1', 'like', 'telefone1'); // filterField, operator, formField
- parent::addFilterField('endereco', 'like', 'endereco'); // filterField, operator, formField
- // creates the form
- $this->form = new BootstrapFormBuilder('form_search_Clientes');
- $this->form->setFormTitle('Clientes Listar');
- // create the form fields
- $nome = new TEntry('nome');
- $telefone1 = new TEntry('telefone1');
- $endereco = new TEntry('endereco');
- $aniversario = new TDate('aniversario');
- $aniversario->setmask('dd/mm/yyyy');
- // add the fields
- $this->form->addFields( [new TLabel('Nome')], [$nome] );
- $this->form->addFields( [new TLabel('Telefone')], [$telefone1] );
- $this->form->addFields( [new TLabel('Endereço')], [$endereco] );
- $this->form->addFields( [new TLabel('Aniversário')], [$aniversario] );
- // keep the form filled during navigation with session data
- $this->form->setData( TSession::getValue('Clientes_filter_data') );
- // add the search form actions
- $this->form->addAction('Filtra' , new TAction(array($this, 'onSearch')), 'fa:search');
- $this->form->addAction('Limpa Filtro' , new TAction(array($this, 'onClear')), 'fa:eraser red' );
- $this->form->addAction('Novo' , new TAction(array('ClientesViewForm', 'onEdit')), 'bs:plus-sign green');
- $this->form->Clear();
- // creates a DataGrid
- $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
- $this->datagrid->style = 'width: 100%';
- $this->datagrid->setHeight(320);
- // creates the datagrid columns
- $column_id = new TDataGridColumn('id', 'Id', 'center', 50);
- $column_nome = new TDataGridColumn('nome', 'Nome', 'left');
- $column_telefone1 = new TDataGridColumn('telefone1', 'Telefone', 'left');
- $column_aniversario= new TDataGridColumn('aniversario', 'Aniversário', 'left');
- $column_endereco = new TDataGridColumn('endereco', 'Endereço', 'left');
- // add the columns to the DataGrid
- $this->datagrid->addColumn($column_id);
- $this->datagrid->addColumn($column_nome);
- $this->datagrid->addColumn($column_telefone1);
- $this->datagrid->addColumn($column_aniversario);
- $this->datagrid->addColumn($column_endereco);
- // creates the datagrid column actions
- $order_id = new TAction(array($this, 'onReload'));
- $order_id->setParameter('order', 'id');
- $column_id->setAction($order_id);
- $order_name = new TAction(array($this, 'onReload'));
- $order_name->setParameter('order', 'nome');
- $column_nome->setAction($order_name);
- // create EDIT action
- $action_edit = new TDataGridAction(array('ClientesViewForm', 'onEdit'));
- $action_edit->setButtonClass('btn btn-default');
- $action_edit->setLabel('Editar');
- $action_edit->setImage('fa:pencil-square-o blue fa-lg');
- $action_edit->setField('id');
- $this->datagrid->addAction($action_edit);
- // create DELETE action
- $action_del = new TDataGridAction(array($this, 'onDelete'));
- $action_del->setButtonClass('btn btn-default');
- $action_del->setLabel('Exclui');
- $action_del->setImage('fa:trash-o red fa-lg');
- $action_del->setField('id');
- $this->datagrid->addAction($action_del);
- // create the datagrid model
- $this->datagrid->createModel();
- // create the page navigation
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigation->setWidth($this->datagrid->getWidth());
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 90%';
- $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- $container->add(TPanelGroup::pack('', $this->datagrid));
- $container->add($this->pageNavigation);
- parent::add($container);
- }
- public function onClear($param)
- {
- $this->form->clear();
- }
- }
- ?>
Os filtros ficam na sessão:
// keep the form filled during navigation with session data
$this->form->setData( TSession::getValue('Clientes_filter_data') );
Se quiser tem que limpar esta sessão, acho q é assim:
TSession::setValue('Clientes_filter_data', null);
LEandro, valeu a tentativa, nao sei...:-(
Direcione o link do seu menu para a função onClear, por exemplo, e dentro dela adicione uma chamada a função onSearch. Assim, sempre que você acessar a classe pelo menu, os dados de busca serão atualizados: