miércoles, 13 de junio de 2007

Buscando página para un registro nuevo

Llevo un rato buscando una estrategia para que al añadir un registro la tabla (paginada) donde se presentan no sólo se actulice, sino que muestre el nuevo registro para proporcionar feedback adecuado al usuario.

Se me ha ocurrido una solución un poco bruta, que por supuesto necesita ser pulida para mantener la consistencia de la aplicación web. Por lo menos funciona.

Simplemente se trata de reordenar la tabla por id descendente justo después de Model::save mediante la especificación de la variable Controller::paginate.

array ('order' => 'modelo.id', 'page' => '1')

Claro que hay que tener muchas cosas a tener en cuenta. Por un lado están otros valores anteriores de la variable. Esto es algo que tal vez se pueda solucionar mediante un array_merge, tal que así:

$this->paginate = array_merge ($this->paginate, array ('order' => 'modelo.id', 'page' => '1'))

En realidad esto no se conserva entre recargas de página, por lo que sería adecuado guardar esta información en la sesión y recuperarla antes de generar la vista..

Ejercicio para el lector

Esto me lleva a pensar que se podría crear un método beforeFilter o beforeRender (no sé exactamente) que se encargase de lidiar con el tema de conservar las páginas actuales de las vistas index, tener en cuenta algunas opciones por defecto para las aplicaciones (como por ejemplo que hubiese una preferencia de usuario o de la aplicación sobre la cantidad de items que se muestran o la ordenación por defecto o lo que sea), y esas cosas. Más o menos tendría que lidiar con:
  • Opciones por defecto "hardcoded"
  • Opciones por defecto de la aplicación, tal vez fijadas en un archivo de configuración u otro almacenamiento.
  • Opciones del perfil de usuario, si procede.
  • Opciones de la sesión de usuario, si procede.
  • Información de página pasada en la sesión, teniendo en cuenta a qué Modelo hace referencia.
Si es lo suficientemente generalizable, se podría hacer un componente.

No hay comentarios: