Clase del Calendario y los Eventos
Código PHP:
Ver original
<?php class Calendario { private $fecha; private $mes; private $hoy; private $w; public function __CONSTRUCT($fecha = 0) { // La fecha actual // La cantidad de dias del mes $this->mes = $this->fecha->format('t'); // El dia de hoy $this->hoy = $this->fecha->format('j'); // El valor numerico de la semana del primer dia del mes $this->w = $this->fecha->modify('-' .($this->hoy-1). ' day')->format('w'); // Restamos para saber desde donde va a empezar a pintar, por ejemplo // si comienza un miercoles, debe dejar 3 cuadros vacios atraz $this->w = $this->w > 0 ? -$this->w+1 : 0; } public function setEvento(Evento $evento) { $this->eventos[] = $evento; } public function Pintar() { echo '<table class="calendario">'; echo ' <tr> <th>Domingo</th> <th>Lunes</th> <th>Martes</th> <th>Miercoles</th> <th>Jueves</th> <th>Viernes</th> <th>Sabado</th> <tr> '; $i=0; for($this->w;$this->w<=$this->mes;$this->w++) { echo ($i == 0) ? '<tr>' : ''; echo ($i%7 == 0 && $i > 0) ? '</tr><tr>' : ''; if($this->w<=0) { echo '<td></td>'; }else { echo '<td ' . ($this->hoy == $i ? 'class="hoy"' : '') . '>'; // Si el dia es hoy // Pintamos el dia actual echo '<span class="dia">' . $this->w . '</span>'; // Agregar los eventos foreach($this->eventos as $e) { if($e->getFecha()->format('d')==$i) { echo '<div class="evento">'; echo '- <a href="#" class="asunto">' . $e->getAsunto() . '</a> '; echo 'programado para las ' . $e->getHora() . ' por <b>' . $e->getCreador() . '</b>'; echo '</div>'; } } echo '</td>'; } $i++; } echo '</table>'; } } class Evento { private $fecha; private $hora; private $creador; private $asunto; public function getFecha() { return $this->fecha; } public function getHora() { return $this->hora; } public function getCreador() { return $this->creador; } public function getAsunto() { return $this->asunto; } public function setFecha($x) { $this->fecha = new DateTime($x); $this->hora = $this->fecha->format('h:ia'); } public function setCreador($x) { $this->creador = $x; } public function setAsunto($x) { $this->asunto = $x; } }
Como seteamos eventos?
Código PHP:
Ver original
<?php // Instanciamos el calendario $c = new Calendario('2013-04-16'); // Seteamos un evento $e = new Evento(); $e->setFecha('2013-04-16 14:02:00'); $e->setCreador('HiToGoRoShi'); $e->setAsunto('Reunion en con nuestro cliente'); $c->setEvento($e); // Seteamos otro evento $e = new Evento(); $e->setFecha('2013-04-18 14:07:00'); $e->setCreador('Kenshin'); $e->setAsunto('Capacitacion en sistema'); $c->setEvento($e); // Seteamos otro evento $e = new Evento(); $e->setFecha('2013-04-18 14:15:00'); $e->setCreador('Raul'); $e->setAsunto('Reunion con los proveedores'); $c->setEvento($e); // Seteamos otro evento $e = new Evento(); $e->setFecha('2013-04-24 14:16:00'); $e->setCreador('Pepe'); $e->setAsunto('Cena con los empleados'); $c->setEvento($e);
Como lo pintamos?
Código PHP:
Ver original
<!DOCTYPE html> <html> <head> <title>Calendario de eventos creado por HiToGoRoShi</title> <link href="calendario.css" rel="stylesheet" /> </head> <body> <h1>Calendario de eventos creado por HiToGoRoShi</h1> <?php $c->Pintar(); ?> </body> </html>
Una hoja de estilo para que se vea algo mejor, guardarlo como calendario.css
Código CSS:
Ver original
.calendario { width:100%; font-family:arial; border-spacing:0; } .calendario th { background:#356AA0; color:white; text-align:left; height:30px; line-height:30px; } .calendario td { width:14%; } .calendario td.hoy { background:#C3D9FF; } .calendario td span.dia { background:#eee; width:20px; padding:5px; display:block; text-align:center; } .calendario td.hoy span.dia { background:#356AA0; color:white; } .calendario td div.evento { display:block; padding:4px; clear:both; font-size:12px; margin:2px; background:#F9F7ED; border:1px solid #d3d3d3; } .calendario td div.evento a { color:black; text-decoration:none; font-weight:bold; }
Ya lo probre y funciona bien, creo que esta bien facil de entender y modificar .. mas bien la funcion Pintar() no deberia hacer el ECHO, sino devolver una cadena que tenga armado el calendario y recien cuando se invoque el metodo ahi hariamos el ECHO
Demo en linea
http://kimsa-media.com/calendario/