Domanda

Ho creato una pagina che visualizza i log del server e aggiunto un modulo di filtro in modo da poter filtrare i log su azioni specifiche, date, ecc io non riesco a capire come utilizzare CPagination di dividere i risultati in pagine, tuttavia. Se posso aggiungere il widget CPagination, quando una pagina viene selezionato dal widget, la forma del filtro non è ripresentato ed i miei risultati del filtro vengono perse.

Sono in perdita per una soluzione semplice per mantenere la mia forma di filtro dei dati con il widget CPagination. Qualsiasi suggerimento sarebbe grande.

Aggiorna
Ho questo funzionamento, ma ho dovuto impostare uno stato di sessione per mantenere i miei dati del modulo.

$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;
}

Tutte le idee su come posso cancellare lo stato di sessione sulla navigazione ad un'altra pagina?

È stato utile?

Soluzione

Se si sta utilizzando CGridView sarebbe facile aggiungere filtri con paginazione - è costruito in. Basta guardare la vista admin.php reso dallo strumento CRUD Gii (o il blog troppo demo forse). Forse non si vuole per visualizzare i log in forma di tabella, però.

Invece di impostare le variabili di sessione si potrebbe fare la forma di un modulo stateful e salvare lo stato utilizzando precedente setPageState (). Non so se le sottomette impaginazione la forma però ... potrebbe essere necessario associare un evento di jQuery per inviare il modulo quando si fa clic sui link di paginazione. Sarebbe un po brutto se si doveva farlo.

Per quanto riguarda la compensazione delle variabili di stato sessione, la mia unica idea in questo momento è quello di sovrascrivere onBeginRequest () o qualcosa per verificare se l'utente è nella pagina di ricerca, e se non sono , quindi cancellare la variabile di sessione. Si potrebbe semplicemente lasciare troppo - impostare una breve data di scadenza e dimenticare. O salvarlo sul database invece della sessione? : P

Modifica

Se si va il percorso di override onBeginRequest () sembra che sia facile come dichiarare una callback nel file di configurazione. Maggiori informazioni qui nel forum Yii e anche qui . Non ho mai fatto io però. Buona fortuna!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top