|
<?php |
|
|
|
/** |
|
* Classe de Navegação para Adianti Framework |
|
* |
|
* Guarda e recupera parametros relacionados (order, offset, limit, direction, page, first_page) |
|
* para manter o estado da paginação dos datagrids ao navegar pelas classes e janelas do sistema |
|
* |
|
* @author Renato Frota <[email protected]> |
|
*/ |
|
|
|
/* |
|
|
|
Uso: |
|
|
|
- obrigatório - 1. no construtor para renderizar a seta de ordenação: |
|
|
|
// antes de criar o datagrid |
|
Navegacao::iniciar(); |
|
|
|
- obrigatório - 2. ao buscar (onSearch) para limpar o estado anterior: |
|
|
|
// antes de definir os filtros |
|
Navegacao::limpar(); |
|
|
|
- obrigatório - 3. ao carregar (onReload) para recuperar o estado de navegação: |
|
|
|
// antes de carregar objetos do repositório |
|
$param = Navegacao::salvar(); |
|
$criteria->setProperties($param); |
|
|
|
- opcional - 4. em uma ação para limpeza dos filtros e da paginação (onClear) |
|
|
|
Navegacao::limpar(); |
|
AdiantiCoreApplication::loadPage(__CLASS__); |
|
|
|
- opcional - 5. em outros métodos de filtragem rápida (ex: onActive) |
|
|
|
$data = (object) ['active' => 'Y']; |
|
$filters = [new TFilter('active', '=', 'Y')]; |
|
Navegacao::limpar($data, $filters); |
|
AdiantiCoreApplication::loadPage(__CLASS__); |
|
|
|
Observações: |
|
|
|
- debug_backtrace() funciona na maioria dos ambientes. se não funcionar no seu, passe a classe na chamada dos métodos, ex: Navegacao::salvar($param, __CLASS__); |
|
|
|
Mudanças: |
|
|
|
- get_called_class() eventualmente retornava a própria classe Navegacao, mesmo quando ela era acionada por um método não estático de outra classe, por isso foi removida. |
|
|
|
- adicionado retorno de $_REQUEST para evitar efeitos indesejados ao atribuir o retorno à $param desnecessariamente por engano ($param = Navegacao::metodo()). |
|
|
|
*/ |
|
|
|
class Navegacao |
|
{ |
|
/** |
|
* Inicializar parâmetros relevantes para a renderização da datagrid |
|
* @param $class String nome da classe relativa aos filtros (opcional) |
|
*/ |
|
public static function iniciar($class = null) |
|
{ |
|
$class = $class ?? debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['class']; |
|
$navegacao = TSession::getValue("{$class}_navegacao"); |
|
$params = ['order', 'direction']; |
|
foreach ($params as $param) { |
|
$value = $input[$param] ?? $navegacao[$param] ?? null; |
|
if (isset($value)) $_GET[$param] = $_GET[$param] ?? $value; |
|
} |
|
return $_REQUEST; |
|
} |
|
|
|
/** |
|
* Limpar parâmetros de navegação salvos na TSession e opcionalmente definir novos filtros de busca |
|
* @param $data Object com novos dados do formulário de busca (opcional) |
|
* @param $filters Array de elementos TFilter equivalentes aos dados do form (opcional; obrigatório quando houver dados de filtragem) |
|
* @param $class String nome da classe relativa aos filtros (opcional) |
|
*/ |
|
public static function limpar(Object $data = null, array $filters = null, $class = null) |
|
{ |
|
$class = $class ?? debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['class']; |
|
TSession::setValue("{$class}_filter_data", $data); |
|
TSession::setValue("{$class}_filters", $filters); |
|
TSession::delValue("{$class}_navegacao"); |
|
return $_REQUEST; |
|
} |
|
|
|
/** |
|
* Salvar parâmetros de navegação na TSession |
|
* @param $input Array contendo valores de entrada (opcional; $_REQUEST é utilizado quando nulo) |
|
* @param $class String nome da classe relativa aos filtros (opcional) |
|
*/ |
|
public static function salvar($input = null, $class = null) |
|
{ |
|
$input = $input ?? $_REQUEST; |
|
$class = $class ?? debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['class']; |
|
$navegacao = TSession::getValue("{$class}_navegacao"); |
|
$params = ['order', 'offset', 'limit', 'direction', 'page', 'first_page']; |
|
foreach ($params as $param) { |
|
$value = $input[$param] ?? $navegacao[$param] ?? null; |
|
if (isset($value)) $input[$param] = $navegacao[$param] = $value; |
|
} |
|
TSession::setValue("{$class}_navegacao", $navegacao); |
|
return $input; |
|
} |
|
} |
Muito bacana! Parabens!