Foros del Web » Programando para Internet » PHP »

Problema con script calendario

Estas en el tema de Problema con script calendario en el foro de PHP en Foros del Web. Hola! Estoy desarrollando una web en la que deseo mostrar un calendario y que este marque los días en los que se ha programado alguna ...
  #1 (permalink)  
Antiguo 03/06/2011, 12:15
 
Fecha de Ingreso: agosto-2009
Mensajes: 349
Antigüedad: 14 años, 8 meses
Puntos: 8
Problema con script calendario

Hola!

Estoy desarrollando una web en la que deseo mostrar un calendario y que este marque los días en los que se ha programado alguna actividad. Hice un sistema simple para agregar eventos a la base datos. Éste guarda la fecha en un campo date.

Luego, busqué en internet un script gratuito que cree un calendario común, encontré el maxCalendar que es muy sencillo. Éste marca sólo el día actual.

Entonces, empezé a revisar el código para poder adaptarlo a mi necesidad y encontré las siguientes lineas:

Código PHP:
Ver original
  1. $actday = 0;
  2.  
  3. for($i=$firstDay['wday'];$i<=7;$i++){
  4.     $actday++;
  5.     if (($actday == $today['mday']) && ($today['mon'] == $month)) {
  6.         $class = ' class="actday"';
  7.     } else {
  8.         $class = '';
  9.     }
  10.     echo "<td$class>$actday</td>";
  11. }

Éstas muestran la primera semana del mes. Entonces pensé en lo siguiente para cambiar eso:

Código PHP:
Ver original
  1. $actday = 0;
  2. $mes = date('m');
  3.    
  4. $con = mysql_connect() or die(mysql_error());
  5.  
  6. $query = mysql_query("SELECT * FROM eventos WHERE MONTH(date) = '$mes'") or die(mysql_error());
  7. $evento = mysql_fetch_array($query);
  8.    
  9. for($i=$firstDay['wday'];$i<=7;$i++){
  10.     $actday++;
  11.     $f = explode("-",$evento['date']);
  12.     $dia = $f[2];
  13.  
  14.     if($actday == $dia) {
  15.         echo "<td class='actday'>$actday</td>";
  16.     } else {
  17.         echo "<td>$actday</td>";
  18.     }
  19.  
  20. }

Como se puede notar a simple vista, ésto sólo marcará 1 evento. Cómo puedo hacer para crear un bucle que marque todos los días en los que hayan eventos programados?

Gracias desde ya.

Última edición por kenproxd; 03/06/2011 a las 12:20
  #2 (permalink)  
Antiguo 03/06/2011, 12:51
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Problema con script calendario

Tendrás que consultar a la bd por si hay eventos en cada día del mes, al así como:
Código PHP:
Ver original
  1. for($dia=1;$dia<=$dias_del_mes;$dia++){
  2.      if(mysql_num_rows($hay=mysql_query("select evento from agenda where fecha='$dia/$mes/$anio'"))){
  3.          $ev=mysql_fetch_assoc($hay);
  4.           echo"<td>$dia  Este dia hay evento $ev[evento]</td>";
  5.      }
  6. }

Claro que esto es solo una idea y debes adaptarla según tu caso.
  #3 (permalink)  
Antiguo 03/06/2011, 13:52
 
Fecha de Ingreso: agosto-2009
Mensajes: 349
Antigüedad: 14 años, 8 meses
Puntos: 8
Respuesta: Problema con script calendario

Cita:
Iniciado por ocp001a Ver Mensaje
Tendrás que consultar a la bd por si hay eventos en cada día del mes, al así como:
Código PHP:
Ver original
  1. for($dia=1;$dia<=$dias_del_mes;$dia++){
  2.      if(mysql_num_rows($hay=mysql_query("select evento from agenda where fecha='$dia/$mes/$anio'"))){
  3.          $ev=mysql_fetch_assoc($hay);
  4.           echo"<td>$dia  Este dia hay evento $ev[evento]</td>";
  5.      }
  6. }

Claro que esto es solo una idea y debes adaptarla según tu caso.
Gracias por tu respuesta!

Dime, es esto factible? me parece que me consumiría mucho ancho de banda hacer tantas consultas.
  #4 (permalink)  
Antiguo 03/06/2011, 13:59
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Problema con script calendario

Ancho de banda no, ya que la consulta se hace en el mismo servidor... a menos que hagas una consulta remota.

Consumo de procesos quizá, podría probarse si se puede optimizar sacando todos los registros del mes en un arreglo ordenados por día y luego al hacer el for para recorrer los días del mes ver si hay un evento en el arreglo para cada día... aunque no estoy seguro si realmente consume menos.
  #5 (permalink)  
Antiguo 03/06/2011, 14:13
 
Fecha de Ingreso: agosto-2009
Mensajes: 349
Antigüedad: 14 años, 8 meses
Puntos: 8
Respuesta: Problema con script calendario

yo tenia la idea de guardar todos los días que devuelva la consulta en un array como éste:

Código PHP:
Ver original
  1. $dias = array('dia1','dia2');

y luego hacer un condicionante con la función in_array pero no se cómo armar ese array.

Si tienes idea de como hacerlo te agradecería que me expliques. Muchas gracias por la primera solución, la pondré en práctica! :)
  #6 (permalink)  
Antiguo 03/06/2011, 14:27
 
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 143
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Problema con script calendario

kenproxd acabo de subir al foro un calendario de eventos que esta rebueno y casi terminado te muestra todos los eventos del mes entre fecha de inicio y de termino echale un vistaso en una de esas te sirve para lo que quieres hacer
  #7 (permalink)  
Antiguo 03/06/2011, 14:41
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Problema con script calendario

Si haces una consulta como ésta:
$eventos=mysql_query("select * from eventos where fecha between '$fecha_inicial' and '$fecha_final' ");

al recorrer la consulta de mysql:
Código PHP:
Ver original
  1. while($evento=mysql_fetch_assoc($eventos)){
  2.      $dia=extrae_dia($evento["fecha"]);//si tienes el campo fecha, debemos extraer el dia del mes con alguna función o precedimiento
  3.      $lista_ev[$dia]=$evento;//en el arreglo $lista_ev guardamos por dia los eventos
  4. }
  5.  
  6. //luego al recorrer el for:
  7.  
  8. for($x=1;$x<=$dias_del_mes;$x++){
  9.     if($lista_ev[$x]!=null){//si hay un evento en el dia indicado
  10.           echo "<td>$x Evento tal:".$lista_ev[$dia]["evento"]."</td>";
  11.     }else
  12.           echo "<td>$x</td>";
  13. }

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 06:20.