cakephp 2.x se pierden los valores de filtrado en la paginacion

Preguntas RecientesCategoria: PHPcakephp 2.x se pierden los valores de filtrado en la paginacion
nhernandez222@gmail.com preguntada 1 año antes

tengo una vista index de usuarios en donde sale la lista de todos mis usuarios pero tengo que filtrar por nombre o apellidos los usuarios, en mi controlador uso $this->Paginator->settings  para setear las condiciones de busqueda para la paginacion y mando el resultado con $this->Paginator->paginate(). Todo sale bien cuando se trata de pocos registros como resultado, pero cuando hay muchos resultados y la view muestra paginados los resultados, al cambiar a la pagina 2, se pierden los resultado filtrados y muestra la pagina 2 pero de todos los registros, como si no se hubieran filtrado, espero me de a entender

1 Respuestas
Best Answer
snow Staff contestada 1 año antes

cuando haces un filtrado mandas una petición de tipo post y se mandan los datos de filtrado en tu variable ‘data’ del request a tu controlador no es así?, por lo general al acceder a tu vista y seleccionar una pagina (de tu paginación obviamente), la petición cambia de post a get y se limpian los valores de data y pues vuelve a mostrar todos los registros, entonces tienes que buscar la forma de guardar los valores de tu filtrado para que se haga la búsqueda con paginación sin importar que sea una petición de tipo post o get a cada momento.
Puedes guardar estos valores en la url, así como en la paginación se hace, tal vez ayas notado que cuando cambias de pagina en tu url se muestra al final /page:2. ese valor se puede obtener o cambiar o crear nuevos desde el controlador con $this->request->params[‘name’]. El paginador guarda y cambia en automático el valor de ‘page’, y tu puedes guardar ahí tu valor de filtrado. En tu controlador verificas si es post la petición y guardas el valor o valores de filtrado

$this->request->params['name']['valor_buscado'] = $this->request->data['valor_buscado'];

y si es get verificas si existe la variable en los params, si si existe guardas alrevez los valores

if(isset($this->request->params['name']['valor_buscado'])) {
    $this->request->data['valor_buscado'] = $this->request->params['name']['valor_buscado'];
}
// codigo en donde haces seteas las condiciones de filtrado

asi respetara el filtrado y la paginacion

Your Answer

18 + 17 =