menu
Fórum Adianti
menu Menu
KeepNavigation 1.00.00 - Classe para manter a paginação Olá, boa tarde, Mais cedo fiz uma postagem em http://www.adianti.com.br/forum/pt/view_4420 Um colega meu pegou esse código e fez um componente, ficou bem bacana, uma vez instalado, seu uso é muito fácil, abaixo detalhes. Ao limpar um filtro, limpamos também os dados do KeepNavigation: public function onClean() { $this->form->clear(); // ...
MD
KeepNavigation 1.00.00 - Classe para manter a paginação  
Olá, boa tarde,

Mais cedo fiz uma postagem em www.adianti.com.br/forum/pt/view_4420

Um colega meu pegou esse código e fez um componente, ficou bem bacana, uma vez instalado, seu uso é muito fácil, abaixo detalhes.

Ao limpar um filtro, limpamos também os dados do KeepNavigation:
public function onClean() { $this->form->clear(); // clear the search data in the session TSession::setValue('List_filter_data', Null); // limpa dados do keepNavigation KeepNavigation::clear(get_class($this)); $param=array(); $param['offset'] =0; $param['first_page']=1; $this->onReload($param); }


Da mesma forma, ao realizar um novo filtro, também limpamos os dados do KeepNavigation.
/** * Register the filter in the session */ public function onSearch() { // get the search form data $data = $this->form->getData(); // clear session filters TSession::setValue('List_filter_data', Null); // limpa dados do keepNavigation KeepNavigation::clear(get_class($this)); // Restante do onSearch não é modificado }


Já no onReload, quando uma listagem é acessada, os dados parâmetros são nulos, nesse caso, o KeepNavigation devolve os dados de paginação do último acesso. Caso a paginação seja utilizada, ou ainda, caso algum parâmetro seja encaminhado para o onReload, ele são atualizados no KeepNavigation:
/** * Load the datagrid with data */ public function onReload($param = NULL) { try { // open a transaction with database 'database' TTransaction::open('database'); // creates a repository for List $repository = new TRepository('List'); $limit = 10; // creates a criteria $criteria = new TCriteria; // atualiza ou recupera os parametros de paginação com dados da sessão $param = KeepNavigation::update($param, get_class($this)); // default order if (empty($param['order'])) { $param['order'] = 'id'; $param['direction'] = 'asc'; } $criteria->setProperties($param); // order, offset $criteria->setProperty('limit', $limit); // Restante do onReload não é modificado } }


É isso ai, com o componente e apenas 3 linhas podemos manter a paginação ao entrar e sair das listagens.

Abraço!

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (5)


LC

Funcionou perfeito. Valeu!
FA

Boa tarde,

Excelente post, experimentei aqui e funcionou super bem mas observei que as listas feitas usando o TStandardList não tinham como usar o KeepNavigation. Um pequeno estudo e pesquisa nas classes base do Adianti e achei onde implementar a mudança para funcionar em toda listagem padrão.

1º Passo - Copiar o KeepNavigation.class.php para a pasta meu_projeto/lib/adianti/base
2º Passo - Troque o nome do KeepNavigation.class.php para KeepNavigation.php
3º Passo - Edite na pasta meu_projeto/lib/adianti/base AdiandiStandardListTrait.php e faço o seguinte:
a) Adicione no início:
  1. <?php
  2. namespace Adianti\Base;
  3. use Adianti\Core\AdiantiCoreTranslator;
  4. use Adianti\Widget\Base\TElement;
  5. use Adianti\Widget\Dialog\TMessage;
  6. use Adianti\Widget\Dialog\TQuestion;
  7. use Adianti\Control\TAction;
  8. use Adianti\Database\TTransaction;
  9. use Adianti\Database\TRepository;
  10. use Adianti\Database\TRecord;
  11. use Adianti\Database\TFilter;
  12. use Adianti\Database\TCriteria;
  13. use Adianti\Registry\TSession;
  14. use Exception;
  15. use KeepNavigation;//Usa o KeepNavigation
  16. /**
  17.  * Standard List Trait
  18.  *
  19.  * @version    5.5
  20.  * @package    base
  21.  * @author     Pablo Dall'Oglio
  22.  * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  23.  * @license    http://www.adianti.com.br/framework-license
  24.  */
  25. </code>

b) na Função onSearch mude:
public function onSearch() { // get the search form data $data = $this->form->getData(); if ($this->formFilters) { foreach ($this->formFilters as $filterKey => $formFilter) { [...] } } // limpa dados do keepNavigation KeepNavigation::clear(get_class($this)); TSession::setValue($this->activeRecord.'_filter_data', $data); TSession::setValue(get_class($this).'_filter_data', $data); [...]


c) na função onReload mude:
public function onReload($param = NULL) { try { [...] // creates a criteria $criteria = isset($this->criteria) ? clone $this->criteria : new TCriteria; // atualiza ou recupera os parametros de paginação com dados da sessão $param = KeepNavigation::update($param, get_class($this)); if ($this->order) { [...]


Com essas poucas mudanças todas lista padrão irá manter a navegação mesmo que troque de página.

Espero que ajude
FA


b) na Função onSearch mude:
  1. <?php
  2. public function onSearch() { // get the search form data $data = $this->form->getData(); if ($this->formFilters) { foreach ($this->formFilters as $filterKey => $formFilter) { [...] } } // limpa dados do keepNavigation KeepNavigation::clear(get_class($this)); TSession::setValue($this->activeRecord.'_filter_data', $data); TSession::setValue(get_class($this).'_filter_data', $data); [...] 
FA

Boa tarde,

Excelente post, experimentei aqui e funcionou super bem mas observei que as listas feitas usando o TStandardList não tinham como usar o KeepNavigation. Um pequeno estudo e pesquisa nas classes base do Adianti e achei onde implementar a mudança para funcionar em toda listagem padrão.

1º Passo - Copiar o KeepNavigation.class.php para a pasta meu_projeto/lib/adianti/base
2º Passo - Troque o nome do KeepNavigation.class.php para KeepNavigation.php
3º Passo - Edite na pasta meu_projeto/lib/adianti/base AdiandiStandardListTrait.php e faço o seguinte:
a) Adicione no início:

  1. <?php
  2.     namespace Adianti\Base;
  3.     use Adianti\Core\AdiantiCoreTranslator;
  4.     use Adianti\Widget\Base\TElement;
  5.     use Adianti\Widget\Dialog\TMessage;
  6.     use Adianti\Widget\Dialog\TQuestion;
  7.     use Adianti\Control\TAction;
  8.     use Adianti\Database\TTransaction;
  9.     use Adianti\Database\TRepository;
  10.     use Adianti\Database\TRecord;
  11.     use Adianti\Database\TFilter;
  12.     use Adianti\Database\TCriteria;
  13.     use Adianti\Registry\TSession;
  14.     use Exception;
  15.     use KeepNavigation;//Usa o KeepNavigation
  16.     /**
  17.      * Standard List Trait
  18.      *
  19.      * @version    5.5
  20.      * @package    base
  21.      * @author     Pablo Dall'Oglio
  22.      * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  23.      * @license    http://www.adianti.com.br/framework-license
  24.      */
  25.     ?>



b) na Função onSearch mude:
  1. <?php
  2.     public function onSearch()
  3.     {
  4.         // get the search form data
  5.         $data $this->form->getData();
  6.         
  7.         if ($this->formFilters)
  8.         {
  9.             [...]
  10.         }
  11.         // limpa dados do keepNavigation 
  12.         KeepNavigation::clear(get_class($this));
  13.         TSession::setValue($this->activeRecord.'_filter_data'$data);
  14.         TSession::setValue(get_class($this).'_filter_data'$data);
  15.         [...]
  16. ?>


c) na função onReload mude:
  1. <?php
  2.     public function onReload($param NULL)
  3.     {
  4.         try
  5.         {
  6.             [...]
  7.             // creates a criteria
  8.             $criteria = isset($this->criteria) ? clone $this->criteria : new TCriteria;
  9.             
  10.             // atualiza ou recupera os parametros de paginação com dados da sessão 
  11.             $param KeepNavigation::update($paramget_class($this));
  12.             
  13.             if ($this->order)
  14.             {
  15.             [...]
  16. ?>


Com essas poucas mudanças todas lista padrão irá manter a navegação mesmo que troque de página.

Espero que ajude

PS: Estou postando novamente pois na primeira tentativa deu ruim...
AR

Excelente contribuição.
Segue o agradecimento ao @Fernando Araújo e ao @Marco Driemeyer.
Bastou descompactar o arquivo zip e seguir as instruções para permitir o controle de navegação nas paginações dos grids.
Só completando as instruções, precisei adicionar a seguinte linha no arquivo "libadianticoreAdiantiClassMap.php" para reconhecer a classe do "KeepNavigation":
$classPath['KeepNavigation'] = 'lib/adianti/base/KeepNavigation.php'; //Alair

Um grande abraço para todos os usuários do Adianti.