Foros del Web » Programando para Internet » PHP »

Calendario

Estas en el tema de Calendario en el foro de PHP en Foros del Web. Hola: Estoy haciendo un calendario para que los usuarios puedan ver las noticias de mi web clasificadas no solo por categoria sino por dias y ...
  #1 (permalink)  
Antiguo 06/10/2004, 21:03
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Calendario

Hola:
Estoy haciendo un calendario para que los usuarios puedan ver las noticias de mi web clasificadas no solo por categoria sino por dias y meses tambien. He estado revisando y en DesarrolloWeb hay un tutorial muy bueno al respecto. He logrado modificar el codigo y adaptarlo a mis necesidades pero me queda una pequeña duda. Este el el codigo en cuestion:
Código PHP:
 function calcula_numero_dia_semana($dia,$mes,$ano){
  
$numerodiasemana date('w'mktime(0,0,0,$mes,$dia,$ano));
  if (
$numerodiasemana == 0)
   
$numerodiasemana 6;
  else
   
$numerodiasemana--;
  return 
$numerodiasemana;
 }

 function 
ultimoDia($mes,$ano){
  
$ultimo_dia=28;
  while (
checkdate($mes,$ultimo_dia 1,$ano)){
   
$ultimo_dia++;
  }
  return 
$ultimo_dia;
 }

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

 function 
Calendar($mes,$ano,$categoria){
  
$nombre_mes dame_nombre_mes($mes);
  
$mes_anterior $mes 1;
  
$ano_anterior $ano;
  if (
$mes_anterior == 0){
   
$ano_anterior--;
   
$mes_anterior 12;
  }
  
$mes_siguiente $mes 1;
  
$ano_siguiente $ano;
  if (
$mes_siguiente==13){
   
$ano_siguiente++;
   
$mes_siguiente=1;
  }
  echo 
"<table width='15%'  border='0' cellspacing='1' cellpadding='0' class='panel table'>";
  echo 
"<tr>";
  echo 
"<td colspan='7' class='padding font topics bold tr' align='center'><span class='info' title='Ir al mes anterior'><a href='noticias.php?categoria=".$categoria."&mes=".$mes_anterior."&ano=".$ano_anterior."&jcgrmsid=".session_id()."'><<</a></span> ".$nombre_mes." ".$ano." <span class='info' title='Ir al mes siguiente'><a href='noticias.php?categoria=".$categoria."&mes=".$mes_siguiente."&ano=".$ano_siguiente."&jcgrmsid=".session_id()."'>>></a></span> </td>";
  echo 
"</tr>";
  echo 
"<tr>";
  echo 
"<td class='padding font bold' align='center'>D</td>";
  echo 
"<td class='padding font bold' align='center'>L</td>";
  echo 
"<td class='padding font bold' align='center'>M</td>";
  echo 
"<td class='padding font bold' align='center'>M</td>";
  echo 
"<td class='padding font bold' align='center'>J</td>";
  echo 
"<td class='padding font bold' align='center'>V</td>";
  echo 
"<td class='padding font bold' align='center'>S</td>";
  echo 
"</tr>";
  
$dia_actual 1;
  
$numero_dia calcula_numero_dia_semana(1,$mes,$ano);
  
$ultimo_dia ultimoDia($mes,$ano);
  echo 
"<tr>";
  for(
$i=-1;$i<6;$i++){
   if(
$i $numero_dia){
    echo 
"<td></td>";
   }else{
    echo 
"<td align='center' class='padding font'><span class='info' title='Noticias de ".$dia_actual."/".$mes."/".$ano."'><a href='noticias.php?accion=mostrar&categoria=".$categoria."&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&jcgrmsid=".session_id()."'>".$dia_actual."</a></span></td>";
    
$dia_actual++;
   }
  }
  echo 
"</tr>";
  
$numero_dia 0;
  while (
$dia_actual <= $ultimo_dia){
   if (
$numero_dia == 0)
    echo 
"<tr>";
    echo 
"<td align='center' class='padding font'><span class='info' title='Noticias de ".$dia_actual."/".$mes."/".$ano."'><a href='noticias.php?accion=mostrar&categoria=".$categoria."&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&jcgrmsid=".session_id()."'>".$dia_actual."</a></span></td>";
    
$dia_actual++;
    
$numero_dia++;
    if (
$numero_dia == 7){
     
$numero_dia 0;
     echo 
"</tr>";
    }
   }
  for (
$i=$numero_dia;$i<7;$i++){
   echo 
"<td></td>";
  }
  echo 
"</tr>";
  echo 
"</table>";
 } 
y entonces la llamada es de esta forma:
Código PHP:
$mes date("m");
   
$ano date("Y");
   
Calendar($mes,$ano,$_GET['categoria']); 
ahora lo que quiero es que por ejemplo si el mes es Octubre no me ponga link a los dias que todavia no han pasado por ejemplo si hoy es 20 no tiene porque ponerle link al dia 31 ni nada por el estilo. Lo he revisado pero no encuentro como hacerlo.

Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 06/10/2004, 23:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Primero tienes que calcular el día de hoy. Eso sólo lo necesitas para un bucle while que está dentro de la función Calendar().
Y haces la comparación. Si el contador es menor que $hoy, pones el enlace.
Si es mayor, no lo pones.
Código PHP:
$numero_dia 0;
$hoy date("d");//Calculamos el día de hoy
$este_mes date("m");//mes actual
$este_ano date("Y");//año actual

//Para limitar los enlaces el mes y año que se muestran 
//o sea, los pasados como parámetro de la función Calendar()
//deben ser los actuales
$limitar_enlaces = ($este_mes==$mes && $este_ano==$ano)?true:false;

while (
$dia_actual <= $ultimo_dia){ 
    if (
$numero_dia == 0)echo "<tr>";
    echo     
"<td align='center' class='padding font'>
        <span class='info' title='Noticias de "
.$dia_actual."/".$mes."/".$ano."'>";
    if(
$dia_actual $hoy && $limitar_enlaces == true){
        echo 
$dia_actual;
    }else{
        echo 
"<a href='noticias.php?accion=mostrar&categoria=".$categoria."&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&jcgrmsid=".session_id()."'>".$dia_actual."</a>";
    }
    echo 
"</span></td>"
        
$dia_actual++; 
        
$numero_dia++; 
        if (
$numero_dia == 7){ 
             
$numero_dia 0
             echo 
"</tr>"
        } 

Esa es la idea... no lo he probado... pero debería funcionar para el mes actual y los anteriores.
Si no comparaba el mes y año actual, si hoy es 20... al ver cualquier otro mes también te mostrará los enlaces sólo hasta el 20.
Ahora, para meses futuros no funciona igual, pero los cambios son mínimos.
Es que para meses futuros no debería mostrar nigún enlace.

Bueno... pruébalo y avisas.

Saludos
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:47.