Question

J'ai mis en place une page qui affiche les journaux de serveur et ajouté une forme de filtre afin que je puisse filtrer les journaux sur des actions spécifiques, dates, etc. Je ne peux pas sembler comprendre comment utiliser CPagination pour diviser les résultats en mais les pages,. Si j'ajoute le widget CPagination, lorsqu'une page est sélectionné dans le widget, la forme de filtre est présenté à nouveau et ne pas mes résultats de filtre sont perdus.

Je suis à une perte pour une solution simple pour maintenir mes données de formulaire de filtre avec le widget CPagination. Toute suggestion serait grande.

Mise à jour
J'ai ce fonctionnement, mais je devais définir un état de session pour maintenir mes données de formulaire.

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

Toutes les idées sur la façon dont je peux effacer l'état de session sur la navigation à une autre page?

Était-ce utile?

La solution

Si vous utilisez CGridView il serait facile d'ajouter des filtres avec pagination - il est construit. il suffit de regarder la vue admin.php rendu par l'outil crud Gii (ou la démo blog peut-être aussi). Peut-être que vous ne voulez pas afficher les journaux sous forme de table cependant.

Au lieu de définir des variables de session que vous pouvez faire sous la forme d'un formulaire stateful et enregistrer l'état précédent en utilisant setPageState (). Je ne sais pas si la pagination soumet le formulaire que ... vous pourriez avoir à lier un événement jQuery pour soumettre le formulaire en cliquant sur les liens de pagination. Ce serait un peu laid si vous deviez le faire.

En ce qui concerne la compensation des variables d'état de session, ma seule idée maintenant est de passer outre OnBeginRequest () ou quelque chose à vérifier si l'utilisateur se trouve sur la page de recherche, et si elles ne sont pas , puis effacer la variable de session. Vous pouvez simplement laisser trop - fixer une date d'expiration courte et oublier. Ou enregistrez-le dans votre base de données au lieu de la session? : P

EDIT

Si vous allez l'itinéraire de passer outre OnBeginRequest () on dirait qu'il est aussi facile que de déclarer un rappel dans le fichier de configuration. Plus d'infos ici dans les forums Yii et ici aussi . Je ne l'ai jamais fait moi-même fait cependant. Bonne chance!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top