CakePHP: Buscando vecinos
07.dic 2007
Envía un trackback
Hablo de los virtuales, reales ya conocemos a uno sin tener todavía piso. El tema que quiero tocar hoy es el entorno de un registro. Dado el registro de una tabla nos gustaría saber el anterior y el posterior para facilitar la navegación con el típico -"« | »"- paginador.
Solo mencionar -para despistados- que los id, por muy autonuméricos que los pongamos en nuestro SGBD no son correlativos ni mucho menos. Es posible que un producto tenga id=12 y el inmediatamente superior sea id=18. Espero no haber tirado al traste muchas teorías.
Después de buscar documentación y hablar largo y tendido sobre como se podría solucionar -la comunidad cakephp hispana es muy generosa- he llegado a la solución definitiva: findNeighbours(). Estaba claro que entre tanta magia, a alguien se le tenía que haber ocurrido antes.
Su uso es sencillo, en la función del controlador correspondiente a la vista donde queramos paginar el anterior siguiente usamos dicho método. Por ejemplo en view() de posts_controller.php
function view($id)
{
$this->Post->recursive = 1; // Posts + Users + Comments
// Devuelve el post seleccionado por id
$this->set('post', $this->paginate('Post', array('Post.id'=>$id)));
// Devuelve un array con los vecinos
$this->set('vecinos', $this->Post->findNeighbours(null,'Post.id' ,$id));
}
Como bien dice el comentario del código, la función devuelve un array -$vecinos- tal que así (suponiendo id=1106):
Array
(
[prev] => 1105
[next] => 1107
)
Preparado para funcionar a nivel de vista para maquetarlo a nuestro gusto... ¡Viva la automagia!.
Comentarios
Esto merece un LOL ! :D
Por cierto, podias ir plasmando todos estos post en un OO document y hacerte un libraco Cake, más que nada para ahorrarte mis preguntas el dia que me decida a meterle mano ! :D
De hecho, por eso escribo estas entradas, a modo de recordatorio e intentando documentar los pasos más perdidos de esta aventura. Todo lo malo de la documentación oficial se equilibra con la automagia, ¿se nota que me gusta el palabro?.
Escribe tu comentario
Intenta que tu comentario sea interesante y con información relevante al tema de la entrada. BBCodes disponibles:
[url=http://direccion]texto[/url], negrita: [b]texto[/b],
itálica: [i]texto[/i], subrayada: [u]texto[/u].
Para mencionar o citar a alguien (quote): [cita]texto[/cita]


