multiple languages OOP PHP 5 Calender (Horizon and Vertical)

Gepost door kaboem op 25-06-2011 15:36.

Met behulp van onder staan script kunt u heel eenvoudig een kalender laten zien aan uw bezoekers in verschillende talen en in verschillende stylen.

De Kalender is zeer eenvoudig aan te passen door middel van CSS naar eigen smaak.

Uitleg

1
$Calender->ShowCalender(1) 

print Kalender dagen bovenin en de Week numers links in de kalender

1
$Calender->ShowCalender(0)

print Kalender dagen links en de Week numers bovenin de kalender

index.php (voorbeeld pagina)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
include('includes/functions.php');

$ThisYear = date('Y');
$ThisMonths = date('n');
$Languages = array(0 =>'Nederlands:nl_NL', 'English:en_EN', 'Deutsch:de_DE', 'español:es_ES', 'française:fr_FR');

//Little Extra Security
$_GET['m'] = (is_numeric($_GET['m']) ?$_GET['m']:'');
$_GET['y'] = (is_numeric($_GET['y']) ?$_GET['y']:'');
$_GET['lang'] = (is_numeric($_GET['lang']) ?$_GET['lang']:'');

$m = ( ( (!empty($_GET['m'])) AND ($_GET['m'] >=1) AND ($_GET['m']<=12) ) ? $_GET['m'] : $ThisMonths);
$y = ( ( (!empty($_GET['y'])) AND ($_GET['y'] >=($ThisYear-10)) AND ($_GET['y']<=$ThisYear) ) ? $_GET['y'] : $ThisYear);
$Lang = (!empty($Languages[$_GET['lang']])?$_GET['lang']:1); //en_EN is default lang
list($LangSpeakOut, $SelectedLang) = explode (':', $Languages[$Lang]);
list($XMLLang) = explode ('_', $SelectedLang);

#########  CALENDER CLASS #########
$Calender = new Calender($m, $y, $SelectedLang);

$Months = $Calender->GetMonths(); //Get Months
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?=$XMLLang;?>" lang="<?=$XMLLang;?>" dir="ltr">
<head>
<title>Calender</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Language" content="<?=$SelectedLang;?>" />
<link href="styles/style.css" type="text/css" rel="stylesheet" />
</head>
 
<body>

<div class="wrapper">
<a href="?lang=<?=$Lang?>">Deze maand</a><br />

<form action="" method="get">
  <input type="hidden" name="m" value="<?=$m;?>" />
  <input type="hidden" name="y" value="<?=$y;?>" />
    <select name="lang" onchange="submit()">
    <option>Select a language</option>
    <?php
    for ($i=0;$i<count($Languages);++$i)
    {
      list ($Language, $LangLocal) = explode(':',$Languages[$i]);
      print '<option value="'.$i.'"'. ( ( (isset($Lang)) AND ($Lang == $i) ) ? ' selected="selected"': ( ( (!isset($Lang)) AND ($i== $ThisMonths) )?' selected="selected"':'')).'>'.$Language.'</option>'."\n";    
    }
    ?>
  </select>
</form>
<br />
<form action="" method="get">
  <input type="hidden" name="lang" value="<?=$Lang;?>" />
  <table width="900" border="1" cellspacing="0" cellpadding="2">
    <tr>
      <td width="50%" align="right" class="CalenderNav" height="29" nowrap="nowrap">
      <select name="m">
        <option>Kies een maand</option>
        <?php
        for ($i=0;$i<count($Months);++$i)
        {
          print '<option value="'.$i.'"'. ( ( (!empty($m)) AND ($m == $i) ) ? ' selected="selected"': ( ( (empty($m)) AND ($i== $ThisMonths) )?' selected="selected"':'')).'>'.$Months[$i].'</option>'."\n";    
        }
        ?>
      </select>
      </td>
      <td align="left" class="CalenderNav">
        <select name="y">
        <?php
        for ($i = 0;$i<=10;++$i)
        {
          print '<option value="'.($ThisYear-$i).'"'. ( ( (!empty($y)) AND ($y == ($ThisYear-$i)) ) ? ' selected="selected"': (  ( (empty($y)) AND (($ThisYear-$i)== $ThisYear) ) ?' selected="selected"':'')).'>'.($ThisYear-$i).'</option>'."\n";    
        }
        ?>
        </select>
        <input type="submit" value=" >> " />
      </td>
    </tr>
  </table>
</form>

<?=$Calender->ShowCalender(1);/* print Calender Days on top Week numbers on left */?>
<br /><br />
  <form action="" method="get">
    <table width="800" border="1" cellspacing="0" cellpadding="2">
      <tr>
        <td width="50%" align="right" class="CalenderNav" height="29" nowrap="nowrap">
          <select name="m">
            <option>Kies een maand</option>
            <?php
            for ($i=0;$i<count($Months);++$i)
            {
            print '<option value="'.$i.'"'. ( ( (!empty($_GET['m'])) AND ($_GET['m'] == $i) ) ? ' selected="selected"': ( ( (empty($_GET['m'])) AND ($i== $ThisMonths) )?' selected="selected"':'')).'>'.$Months[$i].'</option>';    
            }
            ?>
          </select>
        </td>
        <td align="left" class="CalenderNav">
          <select name="y">
          <?php
          for ($i = 0;$i<=10;++$i)
          {
            print '<option value="'.($ThisYear-$i).'"'. ( ( (!empty($y)) AND ($y == ($ThisYear-$i)) ) ? ' selected="selected"': (  ( (empty($y)) AND (($ThisYear-$i)== $ThisYear) ) ?' selected="selected"':'')).'>'.($ThisYear-$i).'</option>';    
          }
          ?>
          </select>
          <input type="submit" value=" >> " /></td>
        </tr>
    </table>
  </form>
  <?=$Calender->ShowCalender(0)/* print Calender Days left  Week numbers on top */?>
 </div>
<br />

</body>
</html>

functions.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php
########### CLASS CALENDER ###########
class Calender
{
  private $MonthName = array(),$TabelWidthVert=800, $TabelWidthHor=900, $fm, $fy, $nu, $by, $bm, $FirstDay, $FirstMonday, $LastDay, $NumberofWeeks, $local;

########### CONSTRUCTOR  ###########
  public function __construct($fm, $fy, $local='en_EN')
  {
    $this->fm=(empty($fm)?date('n'):$fm);
    $this->fy=(empty($fy)?date('Y'):$fy);
    $this->local=$local;

    $this->nu = time();
    $this->by = (date('Y', $this->nu) == $fy);
    $this->bm = (date('n', $this->nu) == $fm);

    $this->FirstDay = mktime(0, 0, 0, $fm, 1, $fy);
    $this->FirstMonday = (date('w', $this->FirstDay) != 1 ? mktime(0,0,0,$fm,1-(!date('w', $this->FirstDay) ? 6 : date('w', $this->FirstDay) - 1),$fy) : $this->FirstDay);

    $this->LastDay = mktime(0, 0, 0, $fm, date('t', mktime(0, 0, 0, $fm, 1, $fy)),$fy);
    $this->LastSunday = (date('w', $this->LastDay)? mktime(0, 0, 0, $fm+1, 7 - date('w',$this->LastDay), $fy) : $this->LastDay);
         
    $edz = ( ( ($fm == 1) AND (date('Y', $this->FirstMonday) != $fy )) ? date('z', mktime(0,0,0,12,31,$fy-1))+1 : ( ( ($fm == 12) AND (date('Y', $this->LastSunday) != $fy) ) ? date('z', mktime(0,0,0,12,31,$fy))+1: 0));
        
    $this->NumberofWeeks = (date('z', $this->LastSunday) + $edz - date('z', $this->FirstMonday) + 1)/7;
        
    $this->FillMonths();    
  }

  public function __destruct()
    {
   //Do whatever you want ;-)
  }

########### FILLMONTHS  ###########
  private function FillMonths()
  {
    for($i=1; $i <= 12; ++$i)
    {
      $this->MonthName[] = $this->DateTime(mktime(1, 0, 0, $i, 1, $this->fy),2);
    }
  }
  
########### GETMONTHS  ###########
  public function GetMonths()
  {
    return $this->MonthName;
  }
  
  private function DateTime($Time, $DateTime=0)
  {
    setlocale(LC_ALL, $this->local);
    $Time=(empty($Time)?time():$Time);        
    $StrTime = ($DateTime==1 ? strftime("%A" , $Time) : ($DateTime==2 ? strftime("%B" , $Time) : strftime("%A %d %b  %Y" , $Time)));
            
    return ucfirst($StrTime);
  }
  
########### SHOWCALENDER  ###########
  public function ShowCalender($CalenderType=1)
  {
  $CalenderType = ($CalenderType==1?1:0);
    
  $html  = "\n".'<table width="'.($CalenderType==1 ?$this->TabelWidthHor:$this->TabelWidthVert).'" border="0" cellspacing="0" cellpadding="2" style="border:1px solid #000;border-bottom:0;">'."\n";
  $html .= '<tr>'."\n";
  $html .= '<td class="CalenderNav" align="center" style="width:151px" nowrap="nowrap"><a href="'.$_SERVER['PHP_SELF'].'?m='.($this->fm > 1 ? $this->fm-1 : 12).'&amp;y='.($this->fm > 1 ? $this->fy : $this->fy-1).'">Vorige maand</a></td>'."\n";
  $html .= '<td class="MonthName" style="border-left:1px solid #000;border-right:1px solid #000;" align="center">';
  $html .= $this->MonthName[$this->fm].' '.$this->fy;
  $html .= '</td>'."\n";
  $html .= '<td class="CalenderNav" align="center" style="width:134px" nowrap="nowrap"><a href="'.$_SERVER['PHP_SELF'].'?m='.($this->fm < 12 ? $this->fm+1: 1).'&amp;y='.($this->fm < 12 ? $this->fy : $this->fy+1).'">Volgende maand</a></td>'."\n";
  $html .= '</tr>'."\n";
  $html .= '</table>'."\n";

  $html  .= "\n".'<table width="'.($CalenderType==1 ?$this->TabelWidthHor:$this->TabelWidthVert).'" border="0" cellspacing="0" cellpadding="2" style="border:1px solid #000;">'."\n";
  $html .= '<tr>'."\n";

  if ($CalenderType==1 )
  {
    $html .= '<td class="WeekNumbers2">&nbsp;</td>';
    
    for($i=0; $i < 7; ++$i)
    {
      $html .= '<td class="CalenderDays2" title="'.$this->DateTime(($this->FirstMonday+(86400*$i)), 1).'">'.$this->DateTime(($this->FirstMonday+(86400*$i)), 1).'</td>'."\n";
    }

    $html .= '</tr>'."\n";

    for($d = 0; $d < $this->NumberofWeeks; ++$d)
    {

      $html .= '<tr>'."\n";
 
      $week = date("W", $this->FirstMonday + $d * 604800 + 3600); // seconden in een week + een uur
      $html .= '<td class="WeekNumbers2" title="Week '.(($week < 10) ? $week : $week).'">'.(($week < 10) ? $week : $week).'</td>'."\n";

      for($w = 0; $w < 7; ++$w)
      {
        $dag = $this->FirstMonday+($w+$d*7)*86400 + 3600;
        $dagnummer = date('j', $dag);
        $bd = (date('j', $this->nu) == $dagnummer);
        $html .= '<td'.(date('n', $dag) != $this->fm ? ' class="OutSideMoth"': ( ( ( ($this->by) AND ($this->bm) ) AND $bd) ? ' class="Today"' : ' class="CalenderDay"')).' style="border-left:1px solid #000;border-top:1px solid #000;text-align:center">';
        $html .= '<a href="'.$_SERVER['PHP_SELF'].'?Dag='.date('d-m-Y', $dag).'&amp;m='.$this->fm.'&amp;y='.$this->fy.'&amp;lang='.$_GET['lang'].'" title="'.$this->DateTime($dag).'">'.($dagnummer < 10 ? 0 : '').$dagnummer.'</a>';
        $html .= '</td>'."\n";
      }
 
      $html .= '</tr>'."\n";
    }
        
  }
  else
  {
    $html .= '<td class="WeekNumbers2">&nbsp;</td>';
    for($i=0; $i < $this->NumberofWeeks; ++$i)
    {
      $week = date("W", $this->FirstMonday + $i * 604800 + 3600); // seconden in een week + een uur
      $html .= '<td class="WeekNumbers" title="Week '.(($week < 10) ? $week : $week).'">Week '.(($week < 10) ? $week : $week).'</td>'."\n";
    }

    $html .= '</tr>'."\n";

    for($d = 0; $d < 7; ++$d)
    {

      $html .= '<tr>'."\n";
      $html .= '<td class="CalenderDays" title="'.$this->DateTime(($this->FirstMonday+(86400*$d)),1).'">'.$this->DateTime(($this->FirstMonday+(86400*$d)),1).'</td>'."\n";

      for($w = 0; $w < $this->NumberofWeeks; ++$w)
      {
        $dag = $this->FirstMonday+($w*7+$d)*86400 + 3600;
        $dagnummer = date('j', $dag);
        $bd = (date('j', $this->nu) == $dagnummer);

        $html .= '<td'.(date('n', $dag) != $this->fm ? ' class="OutSideMoth"': ( ( ( ($this->by) AND ($this->bm) ) AND $bd) ? ' class="Today"' : ' class="CalenderDay"')).' style="border-left:1px solid #000;border-top:1px solid #000;text-align:center">';
        $html .= '<a href="'.$_SERVER['PHP_SELF'].'?Dag='.date('d-m-Y', $dag).'&amp;m='.$this->fm.'&amp;y='.$this->fy.'&amp;lang='.$_GET['lang'].'" title="'.$this->DateTime($dag).'">'.($dagnummer < 10 ? 0 : '').$dagnummer.'</a>';
        $html .= '</td>'."\n";

      }
        $html .= '</tr>'."\n";

    }
  }

  $html .= '</table>'."\n";

  return $html;
  } 
}
?>

style.css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
body
{
  margin:0;
  cursor:default;    
}
.wrapper
{
  margin:0 auto 0 auto;
  width:1002px;
  overflow:hidden;
}
a
{ 
  font: bold 10pt Verdana; 
  color:#000;
  text-decoration:none;
}
a:hover
{ 
  text-decoration:underline;
}
select
{
  font:normal 9pt Arial; 
  color:#000;    
}
.MonthName
{
  font:bold 14pt Arial; 
  color:#fff;
  background-color: #215d7e;
}
.CalenderNav
{
  background-color: #215d7e;
}
.CalenderNav a
{ 
  font:bold 9pt Arial; 
  color:#fff;
  display:block;
  text-decoration:none;
}
.WeekNumbers
{
  font:bold 10pt Verdana; 
  background-color: #e2e2e2;
  width:40px;
  height:20px;
  border-left:1px solid #000;
  text-align:center;
  overflow:hidden;
}
.WeekNumbers2
{
  padding:0;
  font:bold 10pt Verdana; 
  background-color: #e2e2e2;
  width:40px;
  height:20px;
  text-align:center;
  overflow:hidden;
}
.CalenderDays
{
  padding:0;
  padding-left:10px;
  font:bold 10pt Verdana; 
  background-color: #e2e2e2;
  width:120px;
  height:60px;
  overflow:hidden;
}
.CalenderDays2
{
  padding:0;
  font:bold 10pt Verdana; 
  background-color: #e2e2e2;
  text-align:center;
  width:120px;
  border-top:1px solid #000;
  border-left:1px solid #000;
  overflow:hidden;
}
.OutSideMoth
{
  width:120px;
  background-color: #ecebeb;
}
.OutSideMoth a
{ 
  font:normal 9pt Verdana; 
  color:#000;
  text-decoration:none;
}
.Today
{
  width:120px;
  height:60px;
  background-color: #00cccc;
}
.Today a
{ 
  display:block;
  font:bold 12pt Verdana; 
  color:#000;
  text-decoration:none;
  height:60px;
  line-height:60px;
  overflow:hidden;
}
.CalenderDay
{
  margin:0;
  padding:0;
  width:120px;
  height:60px;
  text-align:center;
}
.CalenderDay a
{ 
  display:block;
  font:normal 10pt Verdana; 
  color:#000;
  text-decoration:none;
  width:120px;
  height:60px;
  line-height:60px;
  overflow:hidden;
}

Bestanden van dit script

Kalender/includes/functions.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php
########### CLASS CALENDER ###########
class Calender
{
  private $MonthName = array(),$TabelWidthVert=800, $TabelWidthHor=900, $fm, $fy, $nu, $by, $bm, $FirstDay, $FirstMonday, $LastDay, $NumberofWeeks, $local;

########### CONSTRUCTOR  ###########
  public function __construct($fm, $fy, $local='en_EN')
  {
    $this->fm=(empty($fm)?date('n'):$fm);
    $this->fy=(empty($fy)?date('Y'):$fy);
    $this->local=$local;

    $this->nu = time();
    $this->by = (date('Y', $this->nu) == $fy);
    $this->bm = (date('n', $this->nu) == $fm);

    $this->FirstDay = mktime(0, 0, 0, $fm, 1, $fy);
    $this->FirstMonday = (date('w', $this->FirstDay) != 1 ? mktime(0,0,0,$fm,1-(!date('w', $this->FirstDay) ? 6 : date('w', $this->FirstDay) - 1),$fy) : $this->FirstDay);

    $this->LastDay = mktime(0, 0, 0, $fm, date('t', mktime(0, 0, 0, $fm, 1, $fy)),$fy);
    $this->LastSunday = (date('w', $this->LastDay)? mktime(0, 0, 0, $fm+1, 7 - date('w',$this->LastDay), $fy) : $this->LastDay);
         
    $edz = ( ( ($fm == 1) AND (date('Y', $this->FirstMonday) != $fy )) ? date('z', mktime(0,0,0,12,31,$fy-1))+1 : ( ( ($fm == 12) AND (date('Y', $this->LastSunday) != $fy) ) ? date('z', mktime(0,0,0,12,31,$fy))+1: 0));
        
    $this->NumberofWeeks = (date('z', $this->LastSunday) + $edz - date('z', $this->FirstMonday) + 1)/7;
        
    $this->FillMonths();    
  }

  public function __destruct()
    {
   //Do whatever you want ;-)
  }

########### FILLMONTHS  ###########
  private function FillMonths()
  {
    for($i=1; $i <= 12; ++$i)
    {
      $this->MonthName[] = $this->DateTime(mktime(1, 0, 0, $i, 1, $this->fy),2);
    }
  }
  
########### GETMONTHS  ###########
  public function GetMonths()
  {
    return $this->MonthName;
  }
  
  private function DateTime($Time, $DateTime=0)
  {
    setlocale(LC_ALL, $this->local);
    $Time=(empty($Time)?time():$Time);        
    $StrTime = ($DateTime==1 ? strftime("%A" , $Time) : ($DateTime==2 ? strftime("%B" , $Time) : strftime("%A %d %b  %Y" , $Time)));
            
    return ucfirst($StrTime);
  }
  
########### SHOWCALENDER  ###########
  public function ShowCalender($CalenderType=1)
  {
  $CalenderType = ($CalenderType==1?1:0);
    
  $html  = "\n".'<table width="'.($CalenderType==1 ?$this->TabelWidthHor:$this->TabelWidthVert).'" border="0" cellspacing="0" cellpadding="2" style="border:1px solid #000;border-bottom:0;">'."\n";
  $html .= '<tr>'."\n";
  $html .= '<td class="CalenderNav" align="center" style="width:151px" nowrap="nowrap"><a href="'.$_SERVER['PHP_SELF'].'?m='.($this->fm > 1 ? $this->fm-1 : 12).'&amp;y='.($this->fm > 1 ? $this->fy : $this->fy-1).'">Vorige maand</a></td>'."\n";
  $html .= '<td class="MonthName" style="border-left:1px solid #000;border-right:1px solid #000;" align="center">';
  $html .= $this->MonthName[$this->fm].' '.$this->fy;
  $html .= '</td>'."\n";
  $html .= '<td class="CalenderNav" align="center" style="width:134px" nowrap="nowrap"><a href="'.$_SERVER['PHP_SELF'].'?m='.($this->fm < 12 ? $this->fm+1: 1).'&amp;y='.($this->fm < 12 ? $this->fy : $this->fy+1).'">Volgende maand</a></td>'."\n";
  $html .= '</tr>'."\n";
  $html .= '</table>'."\n";

  $html  .= "\n".'<table width="'.($CalenderType==1 ?$this->TabelWidthHor:$this->TabelWidthVert).'" border="0" cellspacing="0" cellpadding="2" style="border:1px solid #000;">'."\n";
  $html .= '<tr>'."\n";

  if ($CalenderType==1 )
  {
    $html .= '<td class="WeekNumbers2">&nbsp;</td>';
    
    for($i=0; $i < 7; ++$i)
    {
      $html .= '<td class="CalenderDays2" title="'.$this->DateTime(($this->FirstMonday+(86400*$i)), 1).'">'.$this->DateTime(($this->FirstMonday+(86400*$i)), 1).'</td>'."\n";
    }

    $html .= '</tr>'."\n";

    for($d = 0; $d < $this->NumberofWeeks; ++$d)
    {

      $html .= '<tr>'."\n";
 
      $week = date("W", $this->FirstMonday + $d * 604800 + 3600); // seconden in een week + een uur
      $html .= '<td class="WeekNumbers2" title="Week '.(($week < 10) ? $week : $week).'">'.(($week < 10) ? $week : $week).'</td>'."\n";

      for($w = 0; $w < 7; ++$w)
      {
        $dag = $this->FirstMonday+($w+$d*7)*86400 + 3600;
        $dagnummer = date('j', $dag);
        $bd = (date('j', $this->nu) == $dagnummer);
        $html .= '<td'.(date('n', $dag) != $this->fm ? ' class="OutSideMoth"': ( ( ( ($this->by) AND ($this->bm) ) AND $bd) ? ' class="Today"' : ' class="CalenderDay"')).' style="border-left:1px solid #000;border-top:1px solid #000;text-align:center">';
        $html .= '<a href="'.$_SERVER['PHP_SELF'].'?Dag='.date('d-m-Y', $dag).'&amp;m='.$this->fm.'&amp;y='.$this->fy.'&amp;lang='.$_GET['lang'].'" title="'.$this->DateTime($dag).'">'.($dagnummer < 10 ? 0 : '').$dagnummer.'</a>';
        $html .= '</td>'."\n";
      }
 
      $html .= '</tr>'."\n";
    }
        
  }
  else
  {
    $html .= '<td class="WeekNumbers2">&nbsp;</td>';
    for($i=0; $i < $this->NumberofWeeks; ++$i)
    {
      $week = date("W", $this->FirstMonday + $i * 604800 + 3600); // seconden in een week + een uur
      $html .= '<td class="WeekNumbers" title="Week '.(($week < 10) ? $week : $week).'">Week '.(($week < 10) ? $week : $week).'</td>'."\n";
    }

    $html .= '</tr>'."\n";

    for($d = 0; $d < 7; ++$d)
    {

      $html .= '<tr>'."\n";
      $html .= '<td class="CalenderDays" title="'.$this->DateTime(($this->FirstMonday+(86400*$d)),1).'">'.$this->DateTime(($this->FirstMonday+(86400*$d)),1).'</td>'."\n";

      for($w = 0; $w < $this->NumberofWeeks; ++$w)
      {
        $dag = $this->FirstMonday+($w*7+$d)*86400 + 3600;
        $dagnummer = date('j', $dag);
        $bd = (date('j', $this->nu) == $dagnummer);

        $html .= '<td'.(date('n', $dag) != $this->fm ? ' class="OutSideMoth"': ( ( ( ($this->by) AND ($this->bm) ) AND $bd) ? ' class="Today"' : ' class="CalenderDay"')).' style="border-left:1px solid #000;border-top:1px solid #000;text-align:center">';
        $html .= '<a href="'.$_SERVER['PHP_SELF'].'?Dag='.date('d-m-Y', $dag).'&amp;m='.$this->fm.'&amp;y='.$this->fy.'&amp;lang='.$_GET['lang'].'" title="'.$this->DateTime($dag).'">'.($dagnummer < 10 ? 0 : '').$dagnummer.'</a>';
        $html .= '</td>'."\n";

      }
        $html .= '</tr>'."\n";

    }
  }

  $html .= '</table>'."\n";

  return $html;
  } 
}
?>

Kalender/index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
include('includes/functions.php');

$ThisYear = date('Y');
$ThisMonths = date('n');
$Languages = array(0 =>'Nederlands:nl_NL', 'English:en_EN', 'Deutsch:de_DE', 'español:es_ES', 'française:fr_FR');

//Little Extra Security
$_GET['m'] = (is_numeric($_GET['m']) ?$_GET['m']:'');
$_GET['y'] = (is_numeric($_GET['y']) ?$_GET['y']:'');
$_GET['lang'] = (is_numeric($_GET['lang']) ?$_GET['lang']:'');

$m = ( ( (!empty($_GET['m'])) AND ($_GET['m'] >=1) AND ($_GET['m']<=12) ) ? $_GET['m'] : $ThisMonths);
$y = ( ( (!empty($_GET['y'])) AND ($_GET['y'] >=($ThisYear-10)) AND ($_GET['y']<=$ThisYear) ) ? $_GET['y'] : $ThisYear);
$Lang = (!empty($Languages[$_GET['lang']])?$_GET['lang']:1); //en_EN is default lang
list($LangSpeakOut, $SelectedLang) = explode (':', $Languages[$Lang]);
list($XMLLang) = explode ('_', $SelectedLang);

#########  CALENDER CLASS #########
$Calender = new Calender($m, $y, $SelectedLang);

$Months = $Calender->GetMonths(); //Get Months
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?=$XMLLang;?>" lang="<?=$XMLLang;?>" dir="ltr">
<head>
<title>Calender</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Language" content="<?=$SelectedLang;?>" />
<link href="styles/style.css" type="text/css" rel="stylesheet" />
</head>
 
<body>

<div class="wrapper">
<a href="?lang=<?=$Lang?>">Deze maand</a><br />

<form action="" method="get">
  <input type="hidden" name="m" value="<?=$m;?>" />
  <input type="hidden" name="y" value="<?=$y;?>" />
    <select name="lang" onchange="submit()">
    <option>Select a language</option>
    <?php
    for ($i=0;$i<count($Languages);++$i)
    {
      list ($Language, $LangLocal) = explode(':',$Languages[$i]);
      print '<option value="'.$i.'"'. ( ( (isset($Lang)) AND ($Lang == $i) ) ? ' selected="selected"': ( ( (!isset($Lang)) AND ($i== $ThisMonths) )?' selected="selected"':'')).'>'.$Language.'</option>'."\n";    
    }
    ?>
  </select>
</form>
<br />
<form action="" method="get">
  <input type="hidden" name="lang" value="<?=$Lang;?>" />
  <table width="900" border="1" cellspacing="0" cellpadding="2">
    <tr>
      <td width="50%" align="right" class="CalenderNav" height="29" nowrap="nowrap">
      <select name="m">
        <option>Kies een maand</option>
        <?php
        for ($i=0;$i<count($Months);++$i)
        {
          print '<option value="'.$i.'"'. ( ( (!empty($m)) AND ($m == $i) ) ? ' selected="selected"': ( ( (empty($m)) AND ($i== $ThisMonths) )?' selected="selected"':'')).'>'.$Months[$i].'</option>'."\n";    
        }
        ?>
      </select>
      </td>
      <td align="left" class="CalenderNav">
        <select name="y">
        <?php
        for ($i = 0;$i<=10;++$i)
        {
          print '<option value="'.($ThisYear-$i).'"'. ( ( (!empty($y)) AND ($y == ($ThisYear-$i)) ) ? ' selected="selected"': (  ( (empty($y)) AND (($ThisYear-$i)== $ThisYear) ) ?' selected="selected"':'')).'>'.($ThisYear-$i).'</option>'."\n";    
        }
        ?>
        </select>
        <input type="submit" value=" >> " />
      </td>
    </tr>
  </table>
</form>

<?=$Calender->ShowCalender(1);/* print Calender Days on top Week numbers on left */?>
<br /><br />
  <form action="" method="get">
    <table width="800" border="1" cellspacing="0" cellpadding="2">
      <tr>
        <td width="50%" align="right" class="CalenderNav" height="29" nowrap="nowrap">
          <select name="m">
            <option>Kies een maand</option>
            <?php
            for ($i=0;$i<count($Months);++$i)
            {
            print '<option value="'.$i.'"'. ( ( (!empty($_GET['m'])) AND ($_GET['m'] == $i) ) ? ' selected="selected"': ( ( (empty($_GET['m'])) AND ($i== $ThisMonths) )?' selected="selected"':'')).'>'.$Months[$i].'</option>';    
            }
            ?>
          </select>
        </td>
        <td align="left" class="CalenderNav">
          <select name="y">
          <?php
          for ($i = 0;$i<=10;++$i)
          {
            print '<option value="'.($ThisYear-$i).'"'. ( ( (!empty($y)) AND ($y == ($ThisYear-$i)) ) ? ' selected="selected"': (  ( (empty($y)) AND (($ThisYear-$i)== $ThisYear) ) ?' selected="selected"':'')).'>'.($ThisYear-$i).'</option>';    
          }
          ?>
          </select>
          <input type="submit" value=" >> " /></td>
        </tr>
    </table>
  </form>
  <?=$Calender->ShowCalender(0)/* print Calender Days left  Week numbers on top */?>
 </div>
<br />

</body>
</html>

Commentaar

25-06-2011 15:40

Kan de script pagina helaas niet update.

Voorbeeld
http://www.kaboemprogrammeurs.nl/opdrachten/Kalender/index.php

26-06-2011 23:49

Leuk script, heb zelf ook eens een kalender gemaakt. Ik zie alleen nog beveiligingsfoutjes...

Zo zie ik is_numeric() staan, waar je beter ctype_digit() voor kunt gebruiken. 2.89238290802 is namelijk ook een getal, maar je wilt een integer hebben natuurlijk.

$SERVER['PHP_SELF'] is ook niet echt betrouwbaar, zie http://www.pfz.nl/wiki/php-self/ . Zo zijn er nog wat kleine dingetjes, maar ik ga nu eerst eens slapen!

27-06-2011 19:08

Het is ook een voorbeeld pagina maar als ze dit er bij willen kunnen ze wel het volgende veranderen.

//Little Extra Security
$_GET['m'] = (is_numeric($_GET['m']) ?$_GET['m']:'');
$_GET['y'] = (is_numeric($_GET['y']) ?$_GET['y']:'');
$_GET['lang'] = (is_numeric($_GET['lang']) ?$_GET['lang']:'');

naar

//Little Extra Security
$_GET['m'] = (is_numeric($_GET['m']) ? round($_GET['m']):'')+0;
$_GET['y'] = (is_numeric($_GET['y']) ? round($_GET['y']):'')+0;
$_GET['lang'] = (is_numeric($_GET['lang']) ?round($_GET['lang']):'')+0;

en

<form action="" method="get">
naar
<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="get">
of gewoon hard de pagina in action zetten <form action="index.php" method="get">

30-06-2011 22:05

Idee is leuk. Maar... als ik een andere taal kies, verander 'Vorige week/maand' en 'Volgende week/maand' niet mee. Als ik daar toch op klik, veranderen alle buitenlandse woorden weer terug naar nederlands...

02-08-2011 22:06

Ziet er goed uit alleen maand januari van 2011 zit er niet bij en

http://www.kaboemprogrammeurs.nl/opdrachten/Kalender/index.php?m=12&y=2010

geef geen maand, vermoed ( heb helaas niet heel het script doorgelezen) dat er bij het tellen van de maanden iets niet goed gaat want GET m = 1 == februari

Inloggen wachtwoord vergeten? Aanmelden