Calendario e tabelle

  • Creatore Discussione Creatore Discussione ivarello
  • Data di inizio Data di inizio

ivarello

Utente Attivo
14 Dic 2012
211
1
16
Ragazzi sto lavoricchiando sull'esempio di calendario che c'è sul sito e lo stavo modificando a mio piacere.
PHP:
<?php
function ShowCalendar($m,$y)
{
  if ((!isset($_GET['d']))||($_GET['d'] == ""))
  {
    $m = date('n');
    $y = date('Y');
  }else{
    $m = (int)strftime( "%m" ,(int)$_GET['d']);
    $y = (int)strftime( "%Y" ,(int)$_GET['d']);
    $m = $m;
    $y = $y;
  }

  $precedente = mktime(0, 0, 0, $m -1, 1, $y);
  $successivo = mktime(0, 0, 0, $m +1, 1, $y);

  $nomi_mesi = array(
    "Gennaio",
    "Febbraio",
    "Marzo",
    "Aprile",
    "Maggio",
    "Giugno", 
    "Luglio",
    "Agosto",
    "Settembre",
    "Ottobre",
    "Novembre",
    "Dicembre"
  );
  $nomi_giorni = array(
    "LUNEDI",
    "MARTEDI",
    "MERCOLEDI",
    "GIOVEDI",
    "VENERDI",
    "SABATO",
    "DOMENICA"
  );

  $cols = 7;
  $days = date("t",mktime(0, 0, 0, $m, 1, $y)); 
  $lunedi= date("w",mktime(0, 0, 0, $m, 1, $y));
  //-------//
  function num_gg_sett($gg,$nomi_giorni){
   if ((!isset($_GET['d']))||($_GET['d'] == ""))
  {
    $m = date('n');
    $y = date('Y');
  }else{
    $m = (int)strftime( "%m" ,(int)$_GET['d']);
    $y = (int)strftime( "%Y" ,(int)$_GET['d']);
    $m = $m;
    $y = $y;
  }
  $gg= date("w",mktime(0, 0, 0, $m, $gg, $y));
  if($gg==0) $gg = 7;
  return $nomi_giorni[$gg-1];
  }
  //-------//
  if($lunedi==0) $lunedi = 7;
  echo "<table>\n"; 
  echo "<tr>\n
  <td colspan=\"".$cols."\" class=\"titolo\">
  <a href=\"?d=" . $precedente . "\">&lt;&lt;</a>
  " . $nomi_mesi[$m-1] . " " . $y . " 
  <a href=\"?d=" . $successivo . "\">&gt;&gt;</a></td></tr>";
  echo "</tr>";
  $counter = 1;
  for($j = 1; $j<$days+$lunedi; $j++)
  {
	  echo $counter++;
    if($j%$cols+1==0)
    {
      echo "<tr>\n";
    }

    if($j<$lunedi)
    {
      echo "";
    }else{

      $day= $j-($lunedi-1);
      $data = strtotime(date($y."-".$m."-".$day));
      $oggi = strtotime(date("Y-m-d"));
      include 'config.php';
      $sql = "SELECT str_data FROM appuntamenti";
      $result = mysql_query($sql) or die (mysql_error());
      if(mysql_num_rows($result) > 0)
      {
        while($fetch = mysql_fetch_array($result))
        {
          $str_data = $fetch['str_data'];
          if ($str_data == $data)
          {
            $day = "<a href=\"appuntamenti.php?day=$str_data\">$day</a>";
          }
        }
      }

      if($data != $oggi)
      {
		  $d = num_gg_sett($day,$nomi_giorni);
		  if($d == 'DOMENICA' || $d == 'SABATO'){echo "";}else{
        echo "<td><spam class=\"settimana\">".$d.' '.$day."</spam></td>";
		  }
      }else{
        echo "<td><b><spam class=\"oggi\">".$d.' '.$day."</spam></b></td>";
      }
    }

    if($j%$cols==0)
    {
      echo "</tr>";
    }
  }
  echo "<tr></tr>";
  echo "</table>";
}
ShowCalendar(date("m"),date("Y")); 
?>

Quello che sicuramente si vede ho eliminato i sabati e le domaniche, poi ho tolto la barra con i giorni della settimane e li ho inseriti insieme ai giorni.
Unica cosa che mi sta facendo un pò rallentare è la disposizione, cioè di default il codice, chiude la riga delle celle </TR> ogni domenica, così che si parta sempre dal lunedi poi 7 celle e si arriva a domenica.
Quello che vorrei fare io è invece non tener più conto della domenica e chiudere ogni 5 celle nella riga, esempio:

LUNEDI 2 - MARTEDI 3 - MERCOLEDI 4 - GIOVEDI 5 - VENERDI 6
LUNEDI 9 - MARTEDI 10 - MERCOLEDI 11 - GIOVEDI 12 - VENERDI 13
LUNEDI 16 - MARTEDI 17 - MERCOLEDI 18 - GIOVEDI 19 - VENERDI 20
LUNEDI 23 - MARTEDI 24 - MERCOLEDI 25 - GIOVEDI 26 - VENERDI 27

Un aiutino?!
 
Ciao, prova anche questo ciclo
PHP:
<?php

$month = date("m");
$year = date("Y");
$time_primo_del_mese = mktime(0, 0, 0, $month, 1, $year);
$primo_del_mese = date('w', $time_primo_del_mese);
$giorni_nel_mese = cal_days_in_month(CAL_GREGORIAN, $month, $year);
echo "<table border=1>";
echo "<tr>";
echo "<td>L</td>";
echo "<td>M</td>";
echo "<td>M</td>";
echo "<td>G</td>";
echo "<td>V</td>";
echo "</tr>\n";
for ($i = 0; $i < 6; $i++) {
    echo "<tr>";
    for ($x = 1; $x <= 7; $x++) {
        $y = $x + ($i * 7) - $primo_del_mese;
        if ($x > 1 && $x < 7) {
            echo "<td";
            if ($y > 0 && $y <= $giorni_nel_mese) {
                echo ">$y";
            } else {
                echo ">&nbsp;";
            }
            echo "</td>";
        }
    }
    echo "</tr>";
    if ($y >= $giorni_nel_mese && $i < 6)
        break;
}
echo "</table>";
?>
 
Grazie tante per la risposta anche io sono giunto ad uno script simile ;) grazie tante Criric
 

Discussioni simili