Pergunta

Eu tenho até uma página que exibe os logs do servidor e adicionado um filtro de formulário para que eu possa filtrar os logs em ações específicas, datas, etc.Eu não consigo descobrir como usar CPagination para dividir os resultados em páginas, no entanto.Se eu adicionar o CPagination widget, quando uma página é selecionada a partir do widget, o filtro de formulário não é reenviado e meu filtrar os resultados são perdidas.

Eu estou em uma perda para uma solução simples para manter o meu filtro de formulário de dados com o CPagination widget.Qualquer sugestão seria ótimo.

Atualização
Eu tenho isso funcionando, mas eu tinha que definir um estado de sessão para manter a minha forma de dados.

$filter=false;
$form=new LogFilterForm;
if(isset($_POST['LogFilterForm'])){
    $form->attributes=$_POST['LogFilterForm'];
    Yii::app()->user->setState('filter',$form);
    $filter=true;
}
else if(Yii::app()->user->hasState('filter')){
    $form=Yii::app()->user->getState('filter');
    $filter=true;
}

Alguma idéia de como eu posso limpar o estado da sessão de navegação para outra página?

Foi útil?

Solução

Se você estava usando CGridView seria fácil adicionar filtros com paginação - é construído em.Basta olhar para o admin.php ver prestados pelo Idg crud ferramenta (ou o blog de demonstração talvez demasiado).Talvez você não queira exibir os logs em forma de tabela, no entanto.

Em vez de definir variáveis de sessão que você poderia fazer a forma de um stateful formulário e salvar o estado anterior usando setPageState().Eu não sei se a paginação submete o formulário embora...você pode vincular um video do evento para enviar o formulário ao clicar no links de paginação.Que seria o meio feio se você tivesse que fazer isso.

Como para limpar as variáveis de estado de sessão, a minha única ideia agora é substituir onBeginRequest() ou algo para verificar se o usuário estiver na página de pesquisa, e se eles não, e , em seguida, desmarque a variável de sessão.Você poderia simplesmente deixá-lo muito - definir um curto prazo de validade e esquecê-lo.Ou salvá-lo em seu banco de dados em vez da sessão?:P

EDITAR

Se você ir a rota de substituir onBeginRequest() parece que é tão fácil como declarar um retorno de chamada no arquivo de configuração.Mais informações aqui no Yii fóruns, e aqui também.Eu realmente nunca fiz isso embora.Boa sorte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top