lunes, 27 de diciembre de 2010

Parámetros de URL y paginator

Debo decir que odio tener que comenzar esta entrada con el típico: "siento haber estado tanto tiempo sin escribir", pero razones de todo tipo me han mantenido alejado del blog, no siempre de manera muy justificada. Quiero decir, que probablemente mejor me hubiera ido escribiendo aquí que dejando pasar el tiempo sin hacerlo y sin tener la oportunidad de compartir aunque sólo fuesen pequeños trozos de código como el que traigo hoy.

En fin, para volver a la buena senda, he aquí cómo me las apaño para resolver un problema típico:

Tenemos una vista de registros paginada, con la más o menos típica tabla, con sus cabeceras "clicables" para ordenar los registros y sus botones para cambiar de página.

También tenemos un problema: ¿cómo conservar todos los parámetros que vienen en la URL en los enlaces relacionados con la paginación? Pues, la verdad es que es bastante sencillo:

$options = array(
    'url' => array_merge($url, $this->params['named'], $this->params['pass']),
    'model' => $this->defaultModel
);
$this->Paginator->options($options);

Bien, lo que tenemos que hacer es pasarle a Paginator un array de opciones que contenga una clave 'url' la cual estará compuesta por una URL de CakePHP expresada como array a la que habremos añadido los parámetros adecuados.

¿Dónde vamos a encontrar esos parámetros? Muy sencillo, en la vista en la que estemos trabajando (o incluso dentro de un Helper, que es de donde he copiado el código) tendremos los parámetros de la petición presentes en la variable de clase params, estando los parámetros "directos" en la clave 'pass' y los que tienen nombre en la clave 'named'. Simplemente hacermos un array_merge de la url, y ambos arrays de parámetros.

En el código de ejemplo, $url contendrá la URL básica de la vista.