Cache de template en Kumbiaphp

Buenas buenas! les cuento, en la tarde del día miércoles 13 decido pasar por el IRC de #kumbiaphp, para ver si alguien me echaba una mano con una dificultad que tenía.

Conversación va, conversación viene, el gran «joanhey» expuso algunos tips sobre cache que quisiera compartir con ustedes.

Eh aquí fragmentos destacados de la charla:

matiasrosario 17:33:25
el template se cachea solo verdad? cuando el sitio está en produccion

joanhey 17:33:45
no, debes poner en el controller 17:33:56

joanhey 17:35:10
View::cache($time, 'template', $group)

matiasrosario 17:35:17
aaah ok

joanhey 17:35:25
el group es opcional pero muy util, es para agrupar los caches y poderlos borrar si es necesario

joanhey 17:36:14
por ejemplo
si pones 'posts' 17:36:24

joanhey 17:36:37
cuando creas un post nuevo puedes borrar todas las caches de posts y dejar las demas 17:37:12

matiasrosario 17:37:33
excelente!!
si yo cacheo algo y los datos que se muestra alli son dinámicos, qué sucede? 17:38:01
ejemplo, cacheo una vista que es un listado de noticias 17:38:12

joanhey 17:38:28
estara cacheado durante el tiempo que le pusiste

matiasrosario 17:38:36
se van agregando nuevas noticias, te las muestra?

joanhey 17:39:12
si esta cacheado no muestra nada nuevo mientras esta cacheado
pero puedes borrar la cache del grupo noticias 17:39:31
al crear una nueva noticia 17:39:38
y se regenerara a la proxima visita 17:39:55

joanhey 17:40:58
pero recuerda
el cache de template 17:41:02
es solo para datos publicos sin auth 17:41:11
ya que la cache de template se ejecuta lo primero de todo 17:41:24
antes del router, controller 17:41:38

joanhey 17:41:53
asi que no puedes usarlo para datos privados

matiasrosario 17:42:25
claro, entiendo
che, muchas gracias por toda esta info 17:42:35

joanhey 17:42:37
se ejecuta lo pirmero de todo y si existe devuelve el template
no sigue con el proceso del req 17:42:51

matiasrosario 17:43:29
claro, ahi está cuando se ahorra todo el tiempo

joanhey 17:43:47
es rapidisima la cache de template
pero esta pensada para webs o datos publicos 17:44:44

matiasrosario 17:45:12
claro

matiasrosario 17:58:35
cuanto tiempo cachea por defecto kumbia?

joanhey 17:58:49
por defecto KumbiaPHP no cachea nada, solo los metadatos de las tablas (en "temp/cache") para usar en el ActiveRecord 17:59:03
un fw nunca puede decidir cachear 18:01:24
es el programador el que decide que cachear 18:01:34
y por cuanto tiempo 18:01:39

joanhey 18:05:27
cachea el tipo de datos de cada campo
si es string, unique, not null, ... 18:05:45

matiasrosario 18:06:08
uuuh mirá vos todo lo que no conocia

joanhey 18:06:17
1 por cada tabla

matiasrosario 18:06:22
es super util para optimizar la velocidad del sitio todo esto

joanhey 18:06:46
no sirve para todos los casos
pero si en muchos 18:06:50
es como cachear los partials 18:07:06

matiasrosario 18:07:08
claro, siempre y cuando no haya un auth de por medio

joanhey 18:07:11
es muy util
eso es solo para la cache de template (lo de auth)
yo no suelo usar cache de template
porque KumbiaPHP es realmente rapido
pero en algunas webs si puede ser util
pero por ejemplo el cache de partials si lo uso mucho 
tengo partials que muestran RSS
otros el tiempo 18:08:46
y estan cacheados para no solicitar los datos a la web cada vez
tambien para datos de tablas 18:09:13
por ejemplo
partials para: ultimas noticias, ultimos comentarios,.... 
que van en muchas paginas 
solo si se añade una noticia 18:10:12
borro el cache de noticias
o si se añade un comentario
el cache de comentarios
el unico que no es valido con el auth es el de template 18:11:12
los demas caches si

matiasrosario 18:20:25
bárbaro hermano, esta charla se merece un post

Dos nuevos screencast: Instalación de KumbiapPHP y Hola Mundo

Gracias a Roosvelt Aristizabal  de  TutorialesVirtuales.com desde Manizales, Colombia nos trae dos video-tutoriales de muy buena calidad para los que quieren empezar con KumbiaPHP.

Instalar Kumbia PHP en Español

Primeros pasos con KumbiaPHP y su instalación en Windows con xampp.

KumbiaPHP Parte 2 Primera Aplicación

Y como primera aplicación y para entender el MVC se crear el ejemplo del «Hola Mundo» El cual completamos con el tutorial en la comunidad Cristalab: Programar un «Hola mundo» con KumbiaPHP

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!