Pregunta

He creado una página que muestra los registros del servidor y añaden una forma de filtro para que pueda filtrar los registros de acciones específicas, fechas, etc. Me parece que no puede encontrar la manera de utilizar CPagination para dividir los resultados en páginas, sin embargo. Si añado el widget CPagination, cuando una página se selecciona del widget, el filtro se forma no volvió a presentar y mis resultados del filtro se pierden.

Estoy en una pérdida para una solución simple para mantener los datos de mi forma de filtro con el widget CPagination. Cualquier sugerencia sería grande.

Actualizar
Tengo este funcionamiento, pero tenía que establecer un estado de sesión para mantener mis datos del formulario.

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

¿Alguna idea sobre cómo puedo borrar el estado de la sesión de navegación a otra página?

¿Fue útil?

Solución

Si estaba utilizando CGridView sería fácil añadir filtros con paginación - que está construido. Solo vistazo a la vista admin.php dictada por la herramienta de porquería Gii (o el blog de demostración tal vez demasiado). Tal vez usted no desea mostrar los registros en forma de tabla sin embargo.

En lugar de establecer las variables de sesión que podría hacer la forma de una forma de estado y guardar el estado anterior utilizando setPageState (). No sé si los somete la forma de paginación aunque ... puede que tenga que unirse a un evento de jQuery para enviar el formulario al hacer clic en los enlaces de paginación. Eso sería un poco feo si tuviera que hacer eso.

En cuanto a la limpieza de las variables de estado de sesión, mi única idea en este momento es para anular OnBeginRequest () o algo para comprobar si el usuario está en la página de búsqueda, y si no son , a continuación, despejar la variable de sesión. Se podía dejarlo también - fijar una fecha de caducidad corta y olvidarse de él. O guardarlo en su base de datos en lugar de la sesión? : P

Editar

Si vas a la ruta de anular OnBeginRequest () parece que es tan fácil como declarar una devolución de llamada en el archivo de configuración. Más información aquí en los foros de Yii y aquí también . En realidad nunca he hecho yo mismo sin embargo. Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top