Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/10/2008, 14:48
samu22
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años, 1 mes
Puntos: 16
[aporte]Clase para crear calendarios

Hola gente, esta semana eh estado actualizando la web de mi trabajo, el tema que mas me complico es que tenia todas las classes para php 5 y el servidor tenia php 4, por lo cual tuve que rehacer muchas cosas, bueno esta mañana me decidi a hacer un calendario y no sabia como encararlo asi que estuve bastante para terminarlo, le faltan algunos retoques.
Pero por el momento permite generar dos tipos de calendarios, uno simple y otro con gestion de eventos

Código PHP:

<?php

class calendario{
    var 
$date;
    var 
$day;
    var 
$month;
    var 
$year;
    var 
$actualDay;
    var 
$firstDay;
    var 
$lastDay;
    var 
$nexDay;
    var 
$nexMonth;
    var 
$nextYear;
    var 
$Event;
    var 
$classCalendar "defaultCalendar";
    
    function 
calendario($data=null){
        
$this->date time();
        
            if(
is_null($data['dia'])){
                
$data['dia'] = date('d',$this->date);
            }
            if(
is_null($data['mes'])){
                
$data['mes'] = date('m',$this->date);
            }
            if(
is_null($data['anio'])){
                
$data['anio'] = date('Y',$this->date);
            }
                
        
$this->day $data['dia'];
        
$this->month $data['mes'];
        
$this->year $data['anio'];
    }
    
    function 
createMes ($mes,$anio=''){
        
/*******************************************
        el dato $mes tiene que ser un numero del 1 al 12
        ********************************************/
        
if(is_int($mes)){
            if(
$mes >|| $mes <=12){
                
$strMes calendario::switchMes($mes);
                    
// Creamos todas las variables de control
                    
$diaMes 1;
                    
$numDiaSemana calendario::numSemana(1,$mes,$this->year);
                    
$ultimoDia calendario::getLastDay($mes,$this->year);
                    
$currentDay $this->day;
                    
                    
$estruct '
                                            <table class="'
.$classCalendar.'">
                                                <tr colspan="7">'
.$strMes.'</tr>
                                                <tr>
                                                    <td>Lun</td>
                                                    <td>Mar</td>
                                                    <td>Mie</td>
                                                    <td>Jue</td>
                                                    <td>Vie</td>
                                                    <td>Sab</td>
                                                    <td>Dom</td>
                                                </tr>
                                                <tr>'
;
                    
                    for(
$i=0;$i<7;$i++){
                        if(
$i<$numDiaSemana){
                            
//si el dia de la semana i es menor que el numero del primer dia de la semana
                            //no pongo nada en la celda  
                            
$estruct .= '
                                                    <td></td>'
;
                        }else{
                            
//ponemos el numero del dia
                            
if($diaMes == $currentDay){
                                
$estruct .= '    
                                                    <td class="current">'
.$diaMes.'</td>';
                            }else{
                                
$estruct .= '    
                                                    <td>'
.$diaMes.'</td>';
                            }
                            
$diaMes++;
                        }
                    }
                    
                    
                    
$estruct .= '    
                                                </tr>'
;
                    
$setPos 0;
                    
//recorremos los demas dias
                    
while($diaMes <= $ultimoDia){
                        
//si empieza la semana escribimos una nueva linea
                        
if ($setPos == 0){
                            
$estruct .= '<tr>';
                        }
                            if(
$diaMes == $currentDay){
                                
$estruct .= '
                                                        <td class="current">'
.$diaMes.'</td>';
                            }else{
                                
$estruct .= '
                                                        <td>'
.$diaMes.'</td>';
                            }
                            
$diaMes++;
                            
$setPos++;
                        
//chequeamos que no si setPos llego al final de la fila
                        
if ($setPos == 7){
                            
$setPos 0;
                            
$estruct .= '</tr>';
                        }
                    }
                    
                return 
$estruct;        
            }else{
                
$error 'error: Debe ingresar un numero del 1 al 12';
            }
        }else{
            
$error 'el dato debe ser un numero';
                return 
$error;
        }
    }
    
    function 
switchMes ($mes){
        
            switch(
$mes){
                case 
1:    $retMes     =     'Enero';        break;
                case 
2:    $retMes     =     'Febrero';        break;
                case 
3:    $retMes     =     'Marzo';        break;
                case 
4:    $retMes     =     'Abril';        break;
                case 
5:    $retMes     =     'Mayo';            break;
                case 
6:    $retMes     =     'Junio';        break;
                case 
7:    $retMes     =     'Julio';        break;
                case 
8:    $retMes     =     'Agosto';        break;
                case 
9:    $retMes     =     'Septiembre';    break;
                case 
10$retMes     =     'Octubre';        break;
                case 
11$retMes     =     'Noviembre';    break;
                case 
12$retMes     =     'Diciembre';    break;
            }
            return 
$retMes;
        
    }    
        
    function 
numSemana ($dia,$mes,$anio){
        
$intSem date('w'mktime(0,0,0,$mes,$dia,$anio));
            if(
$intSem == 0){
                
$intSem 6;
            }else{
                
$intSem--;
            }
        return 
$intSem;
    }
    
    function 
getLastDay ($mes,$anio){
        
$ultimo_dia=28;
        
// mientras sea true se comprueba, si el mes tiene mas de 28 dias va a umentar sino frena la cuenta en el ultimo numero
            
while (checkdate($mes,$ultimo_dia 1,$anio)){
                
$ultimo_dia++;
            }
        return 
$ultimo_dia;
    } 
    
    function 
checkMes ($mes){
        if(
is_int($mes)){    
            if(
$mes >|| $mes <=12){
                return 
TRUE;
            }else{
                
$error 'El mes debe ser un numero del 1 al 12';
            }
        }else{
            
$error 'El mes debe ser un numero';
        }
        return 
$error;
    }
        
}