Foros del Web » Programando para Internet » PHP »

Como hago un calendario dinámico en php?

Estas en el tema de Como hago un calendario dinámico en php? en el foro de PHP en Foros del Web. Quisiera hacer un calendario que al pulsar sobre alguno de los numeros me saque información de una base de datos, si se puede claro, desde ...
  #1 (permalink)  
Antiguo 05/09/2005, 01:57
 
Fecha de Ingreso: marzo-2005
Mensajes: 24
Antigüedad: 19 años, 1 mes
Puntos: 0
Mensaje Como hago un calendario dinámico en php?

Quisiera hacer un calendario que al pulsar sobre alguno de los numeros me saque información de una base de datos, si se puede claro, desde ya muchas gracias
  #2 (permalink)  
Antiguo 05/09/2005, 02:19
 
Fecha de Ingreso: agosto-2005
Mensajes: 101
Antigüedad: 18 años, 8 meses
Puntos: 0
Aqui tienes un calendario, ahora muestra una pagina en blanco al pulsar sobre un dia, pero si quieres mostrar informacion, solo tienes que pasarle un link a otra pagina con los parametros que te hagan falta para hacer la consulta.
Aqui, primero seleccionas el mes y te muestra el calendario de ese mes.
Puedes modificarlo para que haga lo que tu quieras.
Espero que te sirva.


calendario.html
Código PHP:
<form action="calendario.php">
    <
table>
        <
tr>
            <
td>Elija el mes:</td>
        </
tr>
        <
tr>
            <
td>
                <
select name="mes">
                    <
option>Enero</option>
                    <
option>Febrero</option>
                    <
option>Marzo</option>
                    <
option>Abril</option>
                    <
option>Mayo</option>
                    <
option>Junio</option>
                    <
option>Julio</option>
                    <
option>Agosto</option>
                    <
option>Septiembre</option>
                    <
option>Octubre</option>
                    <
option>Noviembre</option>
                    <
option>Diciembre</option>
                </
select>
            </
td>
        </
tr>
        <
tr>
            <
td><input type="submit" value="Buscar"></td>
        </
tr>
    </
table>
</
form
calendario.php
Código PHP:
<?
function CalendarioPHP($year$month$day_heading_length 3){
    
// Parametros de aspecto del calendario
    
$nombreFichero basename($_SERVER['PHP_SELF']);
    
$ColorFondoCelda '#CCCCCC';
    
$ColorFondoTabla '#666666';
    
$ColorFondoCeldasDiaSemana '#fff4bf';
    
$ColorFondoCeldasFestivo '#ee0000';
    
$ColorFondoCeldaDiaActual '#00ff00';
    
$ColorDiaLaboral '#444444';
    
$ColorDiaFestivo '#ffffff';
    
$ColorDiaActual '#0000ff';
    
$TamanioFuente '5';
    
$TipoFuente 'Arial, Helvetica, sans-serif';
    
$AnchoCalendario '40%';
    
$AltoCalendario '40%';
    
$AnchoCeldas '5%';
    
$AltoCeldas '5%';
    
$AlineacionHorizontalTexto 'center';
    
$AlineacionVerticalTexto 'center';

    
// ----------- INICIO Dias Festivos ----------
    
$DiasFestivos[0] = '1/1'// 1 de enero
    
$DiasFestivos[1] = '6/1'// 6 de enero
    
$DiasFestivos[2] = '19/3'// 19 de marzo
    
$DiasFestivos[3] = '1/5'// 1 de mayo
    
$DiasFestivos[4] = '15/8'// 15 de agosto
    
$DiasFestivos[5] = '12/10'// 12 de octubre
    
$DiasFestivos[6] = '1/11'// 1 de noviembre
    
$DiasFestivos[7] = '6/12'// 6 de diciembre
    
$DiasFestivos[8] = '25/12'// 25 de diciembre
    // festivos Regionales
    
$DiasFestivos[9] = '2/5'// 2 de mayo
    
$DiasFestivos[10] = '15/5'// 15 de mayo
    
$DiasFestivos[11] = '9/9'// 9 de noviembre
    // Semana Santa
    
$DiasFestivos[12] = '17/4'// Jueves Santo
    
$DiasFestivos[13] = '18/4'// Viernes Santo
    
    
$DiasFestivos[14] = '25/7'// Santiago Apostol
    // ----------- FIN Dias Festivos ----------

    //Calculo la fecha actual
    
$dia_actual=date("j",time());
    
$mes_actual=date("n",time());
    
$anio_actual=date("Y",time());
    
    
$first_of_month mktime (0,0,0$month1$year);
    
#remember that mktime will automatically correct if invalid dates are entered
    # for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
    # this provides a built in "rounding" feature to generate_calendar()
    
    
static $day_headings = array('Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo');
    
$maxdays date('t'$first_of_month); #number of days in the month
    
$date_info getdate($first_of_month); #get info about the first day of the month
    
$month $date_info['mon'];
    
$year $date_info['year'];

    
//Traduzco los meses de ingles a Español
    
switch ($date_info['mon']) {
        case 
"January" $date_info[$month]="Enero";break;
        case 
"February" $date_info[$month]="Febrero";break;
        case 
"March" $date_info[$month]="Marzo";break;
        case 
"April" $date_info[$month]="Abril";break;
        case 
"May" $date_info[$month]="Mayo";break;
        case 
"June" $date_info[$month]="Junio";break;
        case 
"July" $date_info[$month]="Julio";break;
        case 
"August" $date_info[$month]="Agosto";break;
        case 
"September"$date_info[$month]="Septiembre";break;
        case 
"October" $date_info[$month]="Octubre";break;
        case 
"November" $date_info[$month]="Noviembre";break;
        case 
"December" $date_info[$month]="Diciembre";break;
    };

    
//Comienzo la tabla que contiene el calendario
    
$calendar = ("<table ").
    (
"border='0' ").
    (
"height='".$AltoCalendario."' ").
    (
"width='".$AnchoCalendario."' ").
    (
"cellspacing='1' cellpadding='2' ").
    (
"bgcolor='".$ColorFondoTabla."'>\n");
    
    
//Cabecera de la tabla calendario
    //Use the <caption> tag or just a normal table heading. Take your pick.
    //$calendar .= "<caption class=\\"month\\">$date_info[month], $year</caption>\n";
    
$calendar .= ("<tr>\n").
    (
"<th height='".$AltoCeldas."' colspan='7'>").
    (
"<font color='".$ColorDiaFestivo."' size=".$TamanioFuente." face='".$TipoFuente."'>").
    (
"$date_info[month], $year").
    (
"</font>").
    (
"</th>\n</tr>\n");
    
    
// Imprime los dias de la semana "Lun", "Mar", etc.
    // Si day_heading_length es 4, aparecerá el nombre entero del dia
    // si no, solo imprime los n primeros caracteres
    
if($day_heading_length and $day_heading_length <= 4){
        
$calendar .= "<tr>\n";
        foreach(
$day_headings as $day_heading){
            
$calendar .= ("<th height='".$AltoCeldas."' abbr='".$day_heading."' class='dayofweek' bgcolor='".$ColorFondoCeldasDiaSemana."'>").
                         (
"<font color='".$ColorDiaLaboral."' size='".$TamanioFuente."' face='".$TipoFuente."'>").
                         (
$day_heading_length != substr($day_heading0$day_heading_length) : $day_heading).
                         (
"</font>").
                         (
"</th>\n");
        }
        
$calendar .= "</tr>\n";
    }
    
    
$calendar .= "<tr>\n";
    
    
//$weekday = $date_info['wday']; //Para que sea el Domingo el primer dia de la semana
    
$weekday $date_info['wday']-1#weekday (zero based) of the first day of the month
    
if ($weekday==-1
        
$weekday=6//Por si el Domingo es el dia 1 del mes
    
    
$day 1#starting day of the month
    
    // Cuidadin con los primeros dias "vacios" del mes
    
if($weekday 0){
        
$calendar .= ("<td bgcolor='".$ColorFondoTabla).("' colspan='".$weekday."'></td>\n");
    }
    
    
//Imprimimos los dias del mes
    
while ($day <= $maxdays){
        if(
$weekday == 7){ //Empieza una nueva semana
            
$calendar .= "</tr>\n<tr>\n";
            
$weekday 0;
        }
    
        
//Miro si el dia que voy a pintar es festivo
        
$esFestivo 0;
        
$tmp_date=$day."/".$month;
        for (
$i=0;$i<15;$i++) {
            if (
$tmp_date==$DiasFestivos[$i]) {
                
$esFestivo=1;
                break;
            }
        }
    
        
$calendar .= ("<td width='".$AnchoCeldas).
                     (
"' height='".$AltoCeldas).
                     (
"' align='".$AlineacionHorizontalTexto).
                     (
"' valign='".$AlineacionVerticalTexto).
                     (
"' ");
    
        
// Coloreo el fondo dependiendo del dia en el que nos encontremos
        
$calendar .= "bgcolor='";
        if ((
$day==$dia_actual) and ($month==$mes_actual) and ($year==$anio_actual)) { //Si el dia es el de hoy
            
$calendar .= $ColorFondoCeldaDiaActual;
        } 
        else { 
// Si el dia no es el de hoy
            
if (($weekday == 5) or ($weekday == 6) or ($esFestivo==1)) { // Si estoy en fin de semana weekday=5,6
                
$calendar .= $ColorFondoCeldasFestivo;
            } 
            else {
                
$calendar .= $ColorFondoCelda;
            };
        };
    
        
// Aqui es donde le pongo lo que tiene que hacer en caso de que exista enlace
        
$link = (basename($_SERVER["PHP_SELF"]))."?fecha=".$month."/".$day."/".$year;
        
$calendar .= "'><a href='".$link."'><font color='";
    
        if ((
$day==$dia_actual) and ($month==$mes_actual) and ($year==$anio_actual)) { //Si el dia es el de hoy
            
$calendar .= $ColorDiaActual;
        } 
        else { 
// Si el dia no es el de hoy
            
if (($weekday == 5) or ($weekday == 6) or ($esFestivo==1)) { // Si estoy en fin de semana weekday=5,6
                
$calendar .= $ColorDiaFestivo;
            } 
            else {
                
$calendar .= $ColorDiaLaboral;
            };
        };
        
$calendar .= ("' ").
                     (
"size='".$TamanioFuente."' ").
                     (
"face='".$TipoFuente."'><strong>".$day).
                     (
"</strong></font></a>").
                     (
"</td>\n");
        
$day++;
        
$weekday++;
    }
    
    
//Cuidadin con los ultimos dias vacios del mes
    
if($weekday != 7){
        
$calendar .= '<td bgcolor="'.$ColorFondoTabla.'" colspan="' . ($weekday) . '"></td>';
    }
    
    
//Chinnnnn pon, devolvemos toda la cadena calendario
    
return $calendar "</tr>\n</table>\n";
// Fin de la funcion CalendarioPHP(año, mes, caracteres del dia)

switch ($mes) {
    case 
"Enero" : echo CalendarioPHP(200511);break;
    case 
"Febrero" : echo CalendarioPHP(200521);break;
    case 
"Marzo" : echo CalendarioPHP(200531);break;
    case 
"Abril" : echo CalendarioPHP(200541);break;
    case 
"Mayo" : echo CalendarioPHP(200551);break;
    case 
"Junio" : echo CalendarioPHP(200561);break;
    case 
"Julio" : echo CalendarioPHP(200571);break;
    case 
"Agosto" : echo CalendarioPHP(200581);break;
    case 
"Septiembre" : echo CalendarioPHP(200591);break;
    case 
"Octubre" : echo CalendarioPHP(2005101);break;
    case 
"Noviembre" : echo CalendarioPHP(2005111);break;
    case 
"Diciembre" : echo CalendarioPHP(2005121);break;
};

?>
  #3 (permalink)  
Antiguo 05/09/2005, 02:43
 
Fecha de Ingreso: marzo-2005
Mensajes: 24
Antigüedad: 19 años, 1 mes
Puntos: 0
Muchísimas Gracias!!!
  #4 (permalink)  
Antiguo 05/09/2005, 03:03
 
Fecha de Ingreso: marzo-2005
Mensajes: 24
Antigüedad: 19 años, 1 mes
Puntos: 0
ME da un error

Me da este error:

Notice: Undefined variable: mes in c:\archivos de programa\easyphp1-7\www\web\ayuntamiento\calendario\calendario.php on line 192
en esa línea de código esta:

Código:
switch ($mes) { 
    case "Enero" : echo CalendarioPHP(2005, 1, 1);break; 
    case "Febrero" : echo CalendarioPHP(2005, 2, 1);break; 
    case "Marzo" : echo CalendarioPHP(2005, 3, 1);break; 
    case "Abril" : echo CalendarioPHP(2005, 4, 1);break; 
    case "Mayo" : echo CalendarioPHP(2005, 5, 1);break; 
    case "Junio" : echo CalendarioPHP(2005, 6, 1);break; 
    case "Julio" : echo CalendarioPHP(2005, 7, 1);break; 
    case "Agosto" : echo CalendarioPHP(2005, 8, 1);break; 
    case "Septiembre" : echo CalendarioPHP(2005, 9, 1);break; 
    case "Octubre" : echo CalendarioPHP(2005, 10, 1);break; 
    case "Noviembre" : echo CalendarioPHP(2005, 11, 1);break; 
    case "Diciembre" : echo CalendarioPHP(2005, 12, 1);break;
Debería poner un switch ($_post["mes"]) verdad?
Y gracias nuevamente!
  #5 (permalink)  
Antiguo 05/09/2005, 03:07
 
Fecha de Ingreso: agosto-2005
Mensajes: 101
Antigüedad: 18 años, 8 meses
Puntos: 0
A mi me funciona asi, porque las variables que se envian por get o post se pueden coger asi directamente, aunque a lo mejor depende de la version de php o de alguna configuracion.
Prueba a poner $_POST a ver si asi te funciona.
  #6 (permalink)  
Antiguo 05/09/2005, 05:13
 
Fecha de Ingreso: octubre-2004
Mensajes: 751
Antigüedad: 19 años, 6 meses
Puntos: 4
Yo de ti me pasaría por esta página aver que te parece...

http://www.desarrolloweb.com/manuales/24/

Es un manual donde se crea paso por paso un calendario. Quizas te sirva!

Saludos.
__________________
sergiold
  #7 (permalink)  
Antiguo 05/09/2005, 06:52
 
Fecha de Ingreso: agosto-2005
Mensajes: 101
Antigüedad: 18 años, 8 meses
Puntos: 0
Me acabo de descargar el que ha dicho sergioId y es mejor que el que yo habia puesto.
Si te lo descargas, coge el primero, el de 3kb, mas que nada porque el diseño es mejor.
  #8 (permalink)  
Antiguo 07/09/2005, 01:16
 
Fecha de Ingreso: marzo-2005
Mensajes: 24
Antigüedad: 19 años, 1 mes
Puntos: 0
Gracias

Muchas gracias!! voy a probar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:05.