Foros del Web » Programando para Internet » PHP »

Calendario gestionable por el usuario

Estas en el tema de Calendario gestionable por el usuario en el foro de PHP en Foros del Web. Hola, me gustaria saber como hacer un calendario en PHP para una pagina donde se alquila una casa. El usuario es quien a traves de ...
  #1 (permalink)  
Antiguo 17/04/2008, 03:31
 
Fecha de Ingreso: marzo-2006
Mensajes: 26
Antigüedad: 18 años, 1 mes
Puntos: 0
Calendario gestionable por el usuario

Hola,

me gustaria saber como hacer un calendario en PHP para una pagina donde se alquila una casa. El usuario es quien a traves de un panel de control debe poder gestionar ese calendario y modificar las fechas para que aparezcan como disponibles o ocupadas.

Gracias
  #2 (permalink)  
Antiguo 17/04/2008, 03:34
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Re: Calendario gestionable por el usuario

Aqui tienes una funcion que hice para tales efectos
Código PHP:
function drawCalendar($curso$mes$ano$funcion$fechatope$topehoras)
    {
    global 
$festivos;
    
$fecha mktime(000$mes1$ano);
    
$i 0;
    
$dias date("t"$fecha);
    while (
$i $dias/7) {
        for (
$j=0$j<7$j++) {
            if (
date("n"$fecha) == $mes$dia[$i][date("w"$fecha)] = date("j"$fecha);
            if (
date("w"$fecha) == 6$i++;
            
$fecha += 86400// +1 dia
            
            
}
        }
    echo 
"\n".'<table class="calendario">';
    echo 
"\n".'<tr><td colspan="7" class="mes">'.mes($mes).' / '.$ano.'</td></tr>';
    echo 
"\n".'<thead><tr><td class="trojo">D</td><td>L</td><td>M</td><td>X</td><td>J</td><td>V</td><td>S</td></tr></thead>';
    echo 
"\n<tbdody>";
    for (
$i=0$i<count($dia); $i++) {
        echo 
"\n\t".'<tr">';
        for (
$j=0$j<7$j++) {
            
$ds = @intval($dia[$i][$j]);
            if (
$ds 0) {
                
$id $ano.$mes.$ds;
                
$id2 $ano.'-'.str_pad($mes2'0'STR_PAD_LEFT).'-'.str_pad($ds2'0'STR_PAD_LEFT);
                if (
in_array(str_pad($ds2'0'STR_PAD_LEFT).'/'.str_pad($mes2'0'STR_PAD_LEFT), $festivos)) $df true; else $df false;
                
$clase "f_gris2";
                if (
$j != && !$df && mktime(000$mes$ds$ano)>time())
                    echo 
'<td class="'.$clase.'" id="'.$id.'"><a href="#'.$ds.'-'.$mes.'-'.$ano.'" onClick="'.$funcion.'('.$curso.', '.$ds.', '.$mes.', '.$ano.', \''.$fechatope.'\', '.$topehoras.');">'.$ds.'</a></td>';
                else {
                    echo 
'<td class="f_gris2';
                    if (
$df) echo " trojo bold"// festivos
                    
elseif ($j == 0) echo " trojo"// domingos
                    
elseif (time() > mktime(000$mes$ds$ano)) $ds "<del>$ds</del>";
                    echo 
'">'.$ds.'</td>';
                    }
                }
            else echo 
'<td>&nbsp;</td>';
            }
        echo 
'</tr>';
        }
    echo 
"\n</tbody>";
    echo 
"\n</table>";
    }
function 
mes($mes) {
    switch (
$mes) {
        case 
1: return "enero";
        case 
2: return "febrero";
        case 
3: return "marzo";
        case 
4: return "abril";
        case 
5: return "mayo";
        case 
6: return "junio";
        case 
7: return "julio";
        case 
8: return "agosto";
        case 
9: return "septiembre";
        case 
10: return "octubre";
        case 
11: return "noviembre";
        case 
12: return "diciembre";
        }
    } 
Modificala a tu gusto y necesidad

Salu2 ^^
  #3 (permalink)  
Antiguo 17/04/2008, 03:37
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Re: Calendario gestionable por el usuario

Ah!
Me falta darte la inicalizacion de la variable $festivos, por si quieres que no se puedan elegir los días festivos
Código PHP:
// Calendario de festivos
$festivos_nacionales = array('01/01''06/01''01/05''01/11''06/12''08/12''25/12');
$festivos_autonomicos = array('28/02'); //Andalucía
$festivos_locales = array('19/08''08/09'); //Málaga
$pascua easter_date();
$dia 60 60 24//duración de un dia en segundos (UNIX)
$semana_santa = array(date('d/m'$pascua - ($dia)), date('d/m'$pascua - ($dia)));
$festivos array_merge($festivos_nacionales$semana_santa);
$festivos2 array_merge($festivos$festivos_autonomicos$festivos_locales);
unset (
$semana_santa$dia$pascua$festivos_nacionales$festivos_autonomicos$festivos_locales$semana_santa);
##END#Festivos####################### 
  #4 (permalink)  
Antiguo 18/04/2008, 01:22
 
Fecha de Ingreso: marzo-2006
Mensajes: 26
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Calendario gestionable por el usuario

Hola,

gracias por el codigo. Podrias explicarme un poco como utilizarlos, ya que no es que controle mucho el PHP. Para lo que quiero hacer, es decir, mostrar un calendario en la web y que el administrador pueda modificar ese calendario en un panel de control marcando las semanas disponibles y las que no, que necesito? o como puedo estructurarlo?. Estoy un poco perdido.

Gracias
  #5 (permalink)  
Antiguo 18/04/2008, 01:36
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Re: Calendario gestionable por el usuario

Buenas
La función recibe algunas variables acorde a mis necesidades, pero no es complicado cambiarlas

function drawCalendar($curso, $mes, $ano, $funcion, $fechatope, $topehoras)

$mes y $ano son obligatorias, ya que te crea el calendario de ese mes en ese año.

$funcion es el nombre de la funcion en JavaScript que se ejecuta al pulsar sobre el dia.

El resto de variables ($curso, $fechatope y $topehoras) son pasadas a la funcion que se ejecuta junto a la fecha elegida, que va en 3 variables separadas (dia, mes y año)

onClick="'.$funcion.'('.$curso.', '.$ds.', '.$mes.', '.$ano.', \''.$fechatope.'\', '.$topehoras.');"

Ten en cuenta que todas las varibles son numericas salvo $fechatope.

Nada, ahora solo quitar o poner variables al gusto! Lo complicado está hecho.
  #6 (permalink)  
Antiguo 18/04/2008, 01:37
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Re: Calendario gestionable por el usuario

para mostrar el calendario, escribes

drawCalendar($curso, $mes, $ano, $funcion, $fechatope, $topehoras) en php, substituyendo las variables por los valores que quieras ($funcion será la función javascript que se ejecutará cuando hagas click)

Se ma adelantao :O
  #7 (permalink)  
Antiguo 18/04/2008, 01:42
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Re: Calendario gestionable por el usuario

Por ejemplo para dibujar una parrilla con 4 meses partiendo del mes actual
Código PHP:
<?php

$mes 
date("n"time());
$ano date("Y"time());
$i 0;
while (
$i<4) {
    echo 
"\n".'<td>';
    
drawCalendar(0$mes$ano"programar"00);
    echo 
"</td>";
    
$mes++;
    if (
$mes 12) {
        
$mes 1;
        
$ano ++;
        }
    
$i ++;
    }

?>
  #8 (permalink)  
Antiguo 18/04/2008, 03:03
 
Fecha de Ingreso: marzo-2006
Mensajes: 26
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Calendario gestionable por el usuario

Algunas preguntas:

Con este codigo consigo pintar un calendario con los meses que yo le indico, pero para que el administrador pueda modificar las semanas que estan disponibles y estas se pinten de un color distinto, este codigo no serviria no? necesitaria otro codigo para esto no? necesitaria base de datos para guardar las fechas disponibles y las que no? todo esto lo deberia de hacer desde una pagina distinta que haria de panel de control.

Un saludo
  #9 (permalink)  
Antiguo 18/04/2008, 03:09
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Re: Calendario gestionable por el usuario

Buenas
Como tiene control de dias no laborables lo que podrias hacer es agregar esos dias al array de festivos

Salu2
  #10 (permalink)  
Antiguo 18/04/2008, 03:10
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Re: Calendario gestionable por el usuario

sí, necesitarias guardar en algún sitio que fechas están ocupadas, y cuales no.....

y luego, en función de "si esa fecha ta ocupada" pos tndrias q poner un fondo u otro al color de la td :)
  #11 (permalink)  
Antiguo 18/04/2008, 03:46
 
Fecha de Ingreso: marzo-2006
Mensajes: 26
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Calendario gestionable por el usuario

No tendreis un codigo que haga algo parecido a lo que quiero hacer, esque no entiendo muy bien la forma en que una vez que el administrador en el panel de control actualiza el calendario, este se muestra en web.
Bueno y tampoco se muy bien como hacer la base de datos o incluir fechas en los arrays de festivos, segun los modifique el administrador (que me imagino que seria con combos y seleccionando un rango de fechas y dandole a ocuapdo o disponble)

Gracias
  #12 (permalink)  
Antiguo 18/04/2008, 04:06
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Re: Calendario gestionable por el usuario

A mi lo que se me ocurre, siguiendo en el planteamiento expuesto anteriormente, es meter los dias que no se puede hacer la reserva en el array de festivos.
Así pues puedes hacer una consulta a la base de datos y ver que dias están ocupados y luego un bucle que los vaya insertando en el array.

El siguiente código es un ejemplo, pues no se ni que base de datos usa ni na de na de tu aplicación
Código PHP:
$q mysql_query("SELECT fecha FROM reservas WHERE hab_id=$id AND fecha>NOW() ORDER BY FECHA");
while (
$r mysql_fetch_row($q)) $festivos[] = $r[0]; 
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 10:51.