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!.
cake pagination neighbours next prev

Comentarios
Gravatar MarcosBL@07.12.2007, 'Re: CakePHP: Buscando vecinos'

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

Gravatar r0sk@07.12.2007, 'Re: CakePHP: Buscando vecinos'

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
 
 
Guardar datos
Escribe tu comentario:
captcha


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]