Foros del Web » Programando para Internet » PHP »

Ayuda con un calendario

Estas en el tema de Ayuda con un calendario en el foro de PHP en Foros del Web. Hola buenos días. En mi web quiero poner un calendário, en el que me marque fechas de eventos que ya tengo en una tabla en ...
  #1 (permalink)  
Antiguo 11/11/2010, 06:46
 
Fecha de Ingreso: junio-2008
Mensajes: 287
Antigüedad: 15 años, 10 meses
Puntos: 1
Ayuda con un calendario

Hola buenos días.

En mi web quiero poner un calendário, en el que me marque fechas de eventos que ya tengo en una tabla en mysql.

Encontré hace unos días un código de calendário pero no recuerdo en que web, pido disculpas al autor, si lee este post le agradecería que me lo haga saber para poder nombrarlo.

El código es el siguiente.

Código PHP:
<?php
function CalendarioPHP($year$month$day_heading_length 3){
// Parametros de aspecto del calendario
$nombreFichero basename($_SERVER['PHP_SELF']);
$ColorFondoCelda '#fff';
$ColorFondoTabla '#eee';
$ColorFondoCeldasDiaSemana '#e67817';
$ColorFondoCeldasFestivo '#fff';
$ColorFondoCeldaDiaActual '#eee';
$ColorDiaLaboral '#000';
$ColorDiaFestivo '#000';
$ColorDiaActual '#000';
$TamanioFuente '1';
$TipoFuente 'Arial, Helvetica, sans-serif';
$AnchoCalendario '100%';
$AltoCalendario '100%';
$AnchoCeldas '1%';
$AltoCeldas '1%';
$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] = '25/7'// 25 de julio
$DiasFestivos[10] = '3/8'// 3 de agosto
$DiasFestivos[11] = '3/12'// 3 de Diciembre
// Semana Santa
$DiasFestivos[12] = '17/4'// Jueves Santo
$DiasFestivos[13] = '18/4'// Viernes Santo
// ----------- 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);
# Recordar que mktime corregerá automáticamente si las fechas no es válidaa se introducen
# Por ejemplo, mktime (0,0,0,12,32,1997) será la fecha de 01 de enero 1998
# Esto proporciona una construida en "redondeo" para generate_calendar ()

static $day_headings = array('Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo');
$maxdays date('t'$first_of_month); #número de días en el mes
$date_info getdate($first_of_month); #obtener información sobre el primer día del mes
$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<14;$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 veo que es donde enlaza con la base de datos
Código PHP:
// Aqui es donde le pongo lo que tiene que hacer en caso de exista enlace
$link = (basename($_SERVER["PHP_SELF"]))."?fecha=".$month."/".$day."/".$year;
$calendar .= "'><a href='".$link."'><font color='"
Código PHP:
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)


//variables para comprovar el año y el mes en el que estamos
$anio=date("Y");
$mes=date("m");

echo 
CalendarioPHP($anio$mes3);
?> 

En mi base de datos solo tengo cuatro campos, ID, Fecha, Titulo, Concepto

Lo que pretendo hacer es que cuando tengún evento en el més en el que estoy me lo marque en el calendario, y que si pincho en esa fecha me lo muestre en una página nueva.

Alguien me puede decir como lo puedo hacer?

Hay alguna manera más sencilla de hacerlo?

Muchas gracias una vez más.

Fernando.
  #2 (permalink)  
Antiguo 11/11/2010, 07:31
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 14 años, 2 meses
Puntos: 55
Respuesta: Ayuda con un calendario

ese script no se enlasa con ninguna base de datos.

te suguiero que al final de ese script, despues del echo CalendarioPHP(); preguntes por si se recibe la fecha por get luego haces la consulta a la base de datos y muestras el contenido en caso de ser un dia festivo
  #3 (permalink)  
Antiguo 11/11/2010, 08:46
 
Fecha de Ingreso: octubre-2007
Mensajes: 87
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: Ayuda con un calendario

uffff como te complicas la vida... jeje
por este foro ronda un calendario mio que puede que te sirva, pero lo voy a "personalizar" un poco para ti, quedaría mas o menos así:
Código PHP:
<?php
$anyo
=date("Y");
$r=0//variable que uso para que cuando cree 4 meses, los siguientes los ponga debajo de estos. Para que quede bien
for($i=1$i<=12$i++) //bucle con los 12 meses del año y sus nombes, que usaremos posteriormente
{
    switch(
$i)
    {
        case 
1:
        
$mes_nombre="Enero";
        break;
        case 
2:
        
$mes_nombre="Febrero";
        break;
        case 
3:
        
$mes_nombre="Marzo";
        break;
        case 
4:
        
$mes_nombre="Abril";
        break;
        case 
5:
        
$mes_nombre="Mayo";
        break;
        case 
6:
        
$mes_nombre="Junio";
        break;
        case 
7:
        
$mes_nombre="Julio";
        break;
        case 
8:
        
$mes_nombre="Agosto";
        break;
        case 
9:
        
$mes_nombre="Septiembre";
        break;
        case 
10:
        
$mes_nombre="Octubre";
        break;
        case 
11:
        
$mes_nombre="Nobiembre";
        break;
        case 
12:
        
$mes_nombre="Diciembre";
        break;
    }
    
echo 
'<table border="0" align="left" cellpadding="0" cellspacing="0" id="meses"><tr>';
echo 
'<td colspan="7" bgcolor="0000FF" ><font color="FFFFFF">&nbsp;'.$mes_nombre.' - '.$anyo.'</font></td>';
$ultimo_dia date("t",mktime(000$i1$anyo)); // ultimo dia del mes dado //

echo '<tr><td align="center">L</td><td align="center">M</td><td align="center">M</td><td align="center">J</td><td align="center">V</td><td align="center">S</td><td align="center">D</td></tr>';
echo 
'<tr>';

for(
$d=1$d<=$ultimo_dia$d++)// crear los dias
{

    if(
$d==1)
    {
    
$dia_name date("D",mktime(000$i1$anyo)); //nombre del dia 1
    
if($dia_name=="Mon"){}
    if(
$dia_name=="Tue"){echo "<td>&nbsp;</td>";}
    if(
$dia_name=="Wed"){echo "<td colspan='2'>&nbsp;</td>";}
    if(
$dia_name=="Thu"){echo "<td colspan='3'>&nbsp;</td>";}
    if(
$dia_name=="Fri"){echo "<td colspan='4'>&nbsp;</td>";}
    if(
$dia_name=="Sat"){echo "<td colspan='5'>&nbsp;</td>";}
    if(
$dia_name=="Sun"){echo "<td colspan='6'>&nbsp;</td>";}    
    
// esto lo hacemos para que el calendario quede bien los primeros dias, por ejemplo, si el primer dia del mes fuera un jueves, no podriamos ponerlo en la primera columna.
    //de esta manera solucuionamos el problema
    
}
    
$dia_nombre date("D",mktime(000$i$d$anyo)); //nombre del dia

if($dia_nombre=="Sun" || $dia_nombre=="Sat"//distinguimos si es sabado o domingo para lo siguiente:
{
    if(
$dia_nombre=="Sun")
    {
        
//si es domingo, hacemos que el calendario vaje a la siguiente fila, para que quiede bien, ademas lo marcamos de color rojo.
        
echo '<td bgcolor="#FF0000" align="center"><font color="#FFFFFF"><b>&nbsp;'.$d.'&nbsp;</b></font></td>'
        echo 
'</tr><tr>';
    }
    else
    {
        
//si es sabado, lo marcamos de color rojo
        
echo '<td bgcolor="#FF0000" align="center"><font color="#FFFFFF"><b>&nbsp;'.$d.'&nbsp;</b></font></td>'//si es sabado, lo marcamos de color rojo
    
}
}
else
{
    
$comprobar=$d.'/'.$i;
    if(
in_array($comprobar,$array_dias_festivos)) // si ha de estar marcado con un color...
    

        echo 
'<td bgcolor="#0000FF" align="center"><font color="#FFFFFF"><b>&nbsp;'.$d.'&nbsp;</b></font></td>';
    }
    else 
// si es un dia normal...
    
{
        echo 
'<td align="center">&nbsp;'.$d.'&nbsp;</td>';
    }
}
}
echo 
'</tr></table>';
$r++;
//if($r>=4){ echo '<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />'; $r=0;}
}

?>
Solo tendrías que poner los dias festivos en un array con "formato" dia/mes en el array $array_dias_festivos

y listo! espero que te sirva
  #4 (permalink)  
Antiguo 16/11/2010, 12:50
 
Fecha de Ingreso: junio-2008
Mensajes: 287
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Ayuda con un calendario

Muchas gracias xlokyx y disculpas por no responder antes.

Lo acavo de poner y parece que va bien y mucho más sencillo que el otro que tenía, ahora me falta que mire en la base de datos los eventos y que me los marque en el calendario y lo segundo que solo me muestre el mes en el que estamos, tal como me lo has pasado me muestra todos los meses.

Eso creo que ya lo sacare.

Muchisimas gracias.

FEr.
  #5 (permalink)  
Antiguo 22/11/2010, 05:25
 
Fecha de Ingreso: junio-2008
Mensajes: 287
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Ayuda con un calendario

Hola buenos días, ya vamos avanzando en el calendario.

ahora lo que tengo que hacer es despues de hacer la consulta a la base de datos que la hace correctamente es marcar en el calendario las fechas en las que hayan eventos y ya por último que cuando pinche en dicha fecha me muestre en una página nueva la información, supongo que eso lo hare por GET pero me he quedado bloqueado con el coloreo de la fecha.

Código PHP:
<?php

// comprobar los eventos que hay en la base de datos y marcarlos en el calendario
$sql="SELECT id_noticia, id_idioma, fecha FROM noticias";
$r=mysql_query($sql$link);
while (
$fila=mysql_fetch_array($r)){
    
$fecha_evento=($fila["fecha"]); // recoger fecha de la base de datos
    
$eventodate("j/m"strtotime("$fecha_evento + 0 days")); // poner la fecha en formato dia/mes
    
}


$anyo=date("Y");
$mes=date("m");

    switch(
$mes)
    {
        case 
1:
        
$mes_nombre="Enero";
        break;
        case 
2:
        
$mes_nombre="Febrero";
        break;
        case 
3:
        
$mes_nombre="Marzo";
        break;
        case 
4:
        
$mes_nombre="Abril";
        break;
        case 
5:
        
$mes_nombre="Mayo";
        break;
        case 
6:
        
$mes_nombre="Junio";
        break;
        case 
7:
        
$mes_nombre="Julio";
        break;
        case 
8:
        
$mes_nombre="Agosto";
        break;
        case 
9:
        
$mes_nombre="Septiembre";
        break;
        case 
10:
        
$mes_nombre="Octubre";
        break;
        case 
11:
        
$mes_nombre="Noviembre";
        break;
        case 
12:
        
$mes_nombre="Diciembre";
        break;
    }



$fecha=date("Y-m-d"easter_date()); // Calcula la fecha desde el 21 y no 22 de marzo la fecha que me muestra es el Sabado de Pascua y no el Domingo


if ($fecha==date("$anyo-04-26")){ // si la fecha obtenida es el 26 de abril la Pascua se pasa al 19 de abril
    
$fecha=date("$anyo-04-19");
    }

if (
$fecha==date("$anyo-04-25")){ // si la fecha obtenida es el 25 de abril la Pascua se pasa al 18 de abril
    
$fecha=date("$anyo-04-18");
    }

$juevessantodate("j/m"strtotime("$fecha - 2 days")); // restar dos días para calcular el Jueves Santo
$viernessantodate("j/m"strtotime("$fecha - 1 days")); //restar un día para calcular el Viernes Santo
$sabadosantodate("j/m"strtotime("$fecha + 0 days")); // se pasa la fecha calculada anteriormente para saber cuando cae el Sábado Santo
$domingopascuadate("j/m"strtotime("$fecha + 1 days")); // añadir un día para calcular el Domingo de Pascua
$lunessantodate("j/m"strtotime("$fecha + 2 days")); // añadir dos días para calcular el Lunes Santo




// ----------- INICIO Dias Festivos ----------
//Días Festivos Nacionales
$array_dias_festivos[0] = '1/01'// 1 de enero Año Nuevo
$array_dias_festivos[1] = '6/01'// 6 de enero día de los Reyes
$array_dias_festivos[2] = '19/03'// 19 de marzo San José
$array_dias_festivos[3] = '1/05'// 1 de mayo día del trabajador
$array_dias_festivos[4] = '25/07'// 15 de Julio Santiago Apostol
$array_dias_festivos[5] = '15/08'// 15 de agosto Asunción de la Virgen
$array_dias_festivos[6] = '12/10'// 12 de octubre día del Pilar
$array_dias_festivos[7] = '1/11'// 1 de noviembre día de Todos los Santos
$array_dias_festivos[8] = '6/12'// 6 de diciembre día de la Constitución
$array_dias_festivos[9] = '8/12'// 8 de diciembre día de la Inmaculada Concepción
$array_dias_festivos[10] = '25/12'// 25 de diciembre día de Navidad

// Semana Santa
$array_dias_festivos[11] = $juevessanto// Jueves Santo
$array_dias_festivos[12] = $viernessanto// Viernes Santo
$array_dias_festivos[13] = $sabadosanto// Sabado Santo
$array_dias_festivos[14] = $domingopascua//Domingo Pascua
$array_dias_festivos[15] = $lunessanto// Lunes Santo
// ----------- FIN Dias Festivos ----------


echo '<table border="0" bgcolor="#EEEEEE" align="center" cellspacing="1" width="100%" height="100%"  id="meses"><tr>';
echo 
'<td colspan="7" bgcolor="#e67817" ><font color="#FFFFFF">&nbsp;'.$mes_nombre.' - '.$anyo.'</font></td>';
$ultimo_dia date("t",mktime(000$mes1$anyo)); // ultimo dia del mes dado //

//título días de la semana
echo '
        <tr>
            <td bgcolor="#e67817" align="center"><font color="#FFFFFF">Lu</font></td>
            <td bgcolor="#e67817" align="center"><font color="#FFFFFF">Ma</font></td>
            <td bgcolor="#e67817" align="center"><font color="#FFFFFF">Mi</font></td>
            <td bgcolor="#e67817" align="center"><font color="#FFFFFF">Ju</font></td>
            <td bgcolor="#e67817" align="center"><font color="#FFFFFF">Vi</font></td>
            <td bgcolor="#e67817" align="center"><font color="#FFFFFF">Sa</font></td>
            <td bgcolor="#e67817" align="center"><font color="#FFFFFF">Do</font></td>
        </tr>'
;
echo 
'<tr>';

for(
$d=1$d<=$ultimo_dia$d++)// crear los dias
{

    if(
$d==1)
    {
    
$dia_name date("D",mktime(000$mes1$anyo)); //nombre del dia 1
    
if($dia_name=="Mon"){}
    if(
$dia_name=="Tue"){echo "<td>&nbsp;</td>";}
    if(
$dia_name=="Wed"){echo "<td colspan='2'>&nbsp;</td>";}
    if(
$dia_name=="Thu"){echo "<td colspan='3'>&nbsp;</td>";}
    if(
$dia_name=="Fri"){echo "<td colspan='4'>&nbsp;</td>";}
    if(
$dia_name=="Sat"){echo "<td colspan='5'>&nbsp;</td>";}
    if(
$dia_name=="Sun"){echo "<td colspan='6'>&nbsp;</td>";}    
    
// esto lo hacemos para que el calendario quede bien los primeros dias, por ejemplo, si el primer dia del mes fuera un jueves, no podriamos ponerlo en la primera columna.
    //de esta manera solucuionamos el problema
    
}
    
$dia_nombre date("D",mktime(000$mes$d$anyo)); //nombre del dia
if($dia_nombre=="Sun" || $dia_nombre=="Sat"//distinguimos si es sabado o domingo para lo siguiente:
{
    if(
$dia_nombre=="Sun")
    {
        
//si es domingo, hacemos que el calendario vaje a la siguiente fila, para que quiede bien, ademas lo marcamos de color
        
echo '<td bgcolor="#555555" align="center"><font color="#FFFFFF"><b>&nbsp;'.$d.'&nbsp;</b></font></td>'
        echo 
'</tr><tr>';
    }
    else
    {
        
//si es sabado, lo marcamos de color
        
echo '<td bgcolor="#555555" align="center"><font color="#FFFFFF"><b>&nbsp;'.$d.'&nbsp;</b></font></td>'//si es sabado, lo marcamos de color
    
}
}
else
{
    
$comprobar=$d.'/'.$mes;
    if(
in_array($comprobar,$array_dias_festivos)) // si ha de estar marcado con un color...
    

        echo 
'<td bgcolor="#555555" align="center"><font color="#FFFFFF"><b>&nbsp;'.$d.'&nbsp;</b></font></td>';
    }
    else 
// si es un dia normal...
    
{
        echo 
'<td bgcolor="#FFFFFF" align="center"><font color="#555555"><b>&nbsp;'.$d.'&nbsp;</b></font></td>';
    }
}
}
echo 
'</tr></table>';

?>
Este es todo el código.

Alguien sabe como lo tengo que hacer?

Gracias mil veces más.

Fernando.

Etiquetas: calendario
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 11:07.