iCal con Kumbiaphp beta2

Buen día,

Este es mi primer post para la comunidad y espero les sirva:

Voy a explicar como implementar un iCal  jQuery (Calendario de eventos con estilo similar al del iphone) y poblarlo con los datos que tengo en MySQL a través de Kumbiaphp Framework:

Lo primero que deben hacer, obviamente después de tener configurado Kumbiaphp Beta2, es descargar el iCal desde aquí .  Los archivos .js se ubican en /default/app/public/javascript, el archivo .css se ubica en /default/app/public/css.

Creamos una tabla en MySQL que va a ser nuestro insumo de datos para poblar el calendario (supongo hasta aquí que ya saben que es un modelo, como se configura la base de datos y sus convenciones) :


CREATE TABLE IF NOT EXISTS `agenda` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `fecha` date NOT NULL,
    `hora_inicio` time NOT NULL,
    `hora_fin` time NOT NULL,
    `producto_id` int(11) NOT NULL,
    `cliente_id` int(11) NOT NULL,
    `estado` varchar(10) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT= 8;

Si se fijan,  la creación de la tabla está asociada a dos tablas que son cliente y producto.

En la clase modelo agenda.php se crea una función:


public function getCalendario() {
    $sql = "SELECT fecha as date, producto.nombre as title,
       CONCAT(hora_inicio, ' hasta ', hora_fin, ' ', cliente.nombres, ' ', cliente.apellidos) as 'desc'
       FROM agenda
       INNER JOIN cliente ON (agenda.cliente_id=cliente.id)
       INNER JOIN producto ON (agenda.producto_id=producto.id)";

    return $this->find_all_by_sql($sql);
}

Cómo pueden ver hay un join a dos tablas asociadas.

En el controlador agenda_controller.php se crea una función que llame la consulta creada en el modelo y lo traiga en un array:


public function verCalendario() {
    $this->calendario = Load::model('agenda')->getCalendario();
}

Luego en el directorio  /default/app/view/_shared/partials se crea un partial, decidí hacer un partial para reutilizarlo en caso de que necesite incluirlo en otras páginas.


<script type = "text/javascript">
    $(document).ready(function () {
        $("#ical").ical({
            daynames: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'],
            //startOnSunday: true,
            eventdates: <?php echo json_encode($Model); ?>
        });
    });
</script>
<div id="ical"></div>

Como ven estoy usando la función json_encode que me va a arrojar un formato como este:


eventdates: [{"date": "2009-03-21", "title": "My birthday", "desc": "Its my birthday!"},
{"date": "yyyy-01-01", "title": "New Year", "desc": "Its a new year!"}]

Los alias que utilicé en la consulta del modelo (date,title,desc) están asociados a este formato.

Y por último se implementa la vista verCalendario.phtml con el siguiente código:


<?php
echo Tag::js('jquery-1.3.2.min');
echo Tag::js('jquery-ical');
Tag::css('master');
?>
<?php echo View::content(); ?>
<?php echo View::partial('ical/script', false, array('Model' => $calendario)); ?>

Y esto es todo, espero sea de utilidad y si tienen aportes, mejoras o recomendaciones ¡bien recibidas sean!