Skrypty > eCalendar

Skrypt ten umożliwia nam umieszczenie kalendarza na stronie (lub kilku), możemy definiować święta, które będą w nim zaznaczane oraz inne ważne dla nas wydarzenia. eCalendar może także wyswietlać imieniny (jeśli pobrana została tekstowa baza imion), można nim "sterować" z poziomu przeglądarki.

Kod PHP kalendarza (do umieszczenia na początku strony):

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
<?php
//========eCalendar v1.0.3=========
// Autor: Emdek <http://emdek.cba.pl>
// Licencja: GPL
// W skrypcie wykorzystano bazę danych z imionami z: "Imieniny - skrypt pochodzi ze strony www.bastek.tvs.pl"
// Skrypt bazuje na rozwiązaniach zastosowanych w skrypcie calendar.php 1.4 autorstwa Bena Frame <ben@networkscompany.com>
function namedays ($Day, $Month, $Path, $Small) {
         if (file_exists ($Path.'1.inc')) {
            $NameDays = file ($Path.$Month.'.inc');
            return (($Small?', i':'I').'mieniny: '.trim ($NameDays[$Day]));
            }
         }
function calendar ($ID, $Date = 'NOW', $Path = './imieniny/') { // KONFIGURACJA
         $DayWeekStarts = 2; // Numer dnia od którego wyświetlane są dni w kalendarzu (2 - poniedziałek)
         $Months = array ('', 'Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień');
         $Months2 = array ('', 'stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia');
         $Days = array ('', 'Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota');
         $ImportantDays = array (1 => array (14 => 'Jakaś data'), 10 => array (1 => 'Urodziny Zenka')); // "ważne dni"
         $Holidays = array (1 => array (1 => 'Nowy Rok'), 5 => array (1 => 'Święto pracy', 3 => 'Święto konstytucji'), 8 => array (15 => 'Wniebowzięcie NMP'), 11 => array (1 => 'Święto Zmarłych', 11 => 'Święto Niepodległości'), 12 => array (25 => 'Boże Narodzenie', 26 => 'Boże Narodzenie')); // święta
         if (!empty($_POST['d']) && $_POST['id'] == $ID) $Date = $_POST['year'].'-'.$_POST['month'].'-'.$_POST['d'];
         else if(!empty($_POST['y']) && $_POST['id'] == $ID) {
              if ($_POST['y'] == '&#187;') $_POST['y'] = $_POST['year'] + 1;
              else if ($_POST['y'] == '&#171;') $_POST['y'] = $_POST['year'] - 1;
              if ($_POST['year'] < 1971 || $_POST['year'] > 2036) $_POST['y'] = 2000;
              if ($_POST['day'] < 10) $_POST['day'] = '0'.$_POST['day'];
              $Date = $_POST['y'].'-'.$_POST['month'].'-'.$_POST['day'];
              }
         else if (!empty($_POST['m']) && $_POST['id'] == $ID) {
                 if ($_POST['m'] == '&#187;') $_POST['m'] = $_POST['month'] + 1;
                 else if ($_POST['m'] == '&#171;') $_POST['m'] = $_POST['month'] - 1;
                 if ($_POST['m'] == 13) {
                     $_POST['m'] = 1;
                     $_POST['year']++;
                     }
                 else if ($_POST['m'] == 0) {
                         $_POST['m'] = 12;
                         $_POST['year'] = $_POST['year'] - 1;
                         }
                 if ($_POST['m'] < 10) $_POST['m'] = '0'.$_POST['m'];
                 if ($_POST['day'] < 10) $_POST['day'] = '0'.$_POST['day'];
                 if ($_POST['year'] < 1971 || $_POST['year'] > 2036) $_POST['year'] = 2000;
                 $Date = $_POST['year'].'-'.$_POST['m'].'-'.$_POST['day'];
                 }
         $Date = getdate (strtotime ($Date));
         if (function_exists ('easter_date')) {
            $Holidays[date ('n', easter_date ($Date['year']))][date ('j', easter_date ($Date['year']))] = 'Wielkanoc'; // data Wielkanocy
            if (date ('t', easter_date ($Date['year'])) == 31) $Holidays[4][1] = 'Poniedziałek Wielkanocny'; // Ponioedziałek Wielkanocy
            else $Holidays[date ('n', easter_date ($Date['year']))][date ('j', easter_date ($Date['year'])) + 1] = 'Poniedziałek Wielkanocny'; // Ponioedziałek Wielkanocy
            }
         $NumberOfDays = date (t, mktime (0, 0, 0, $Date['mon'] + 1, 0, $Date['year'], -1));
         $FirstDayOfWeek = date (w, mktime (0, 0, 0, $Date['mon'], 1, $Date['year']));
         $CalendarData = array (array (1, 0, 6, 5, 4, 3, 2, 1), array (2, 1, 0, 6, 5, 4, 3, 2), array (3, 2, 1, 0, 6, 5, 4, 3), array (4, 3, 2, 1, 0, 6, 5, 4), array (5, 4, 3, 2, 1, 0, 6, 5), array (6, 5, 4, 3, 2, 1, 0, 6), array (7, 6, 5, 4, 3, 2, 1, 0));
         $Offset = $CalendarData[$FirstDayOfWeek][$DayWeekStarts];
         $DayOfWeekNum = $CalendarData[$FirstDayOfWeek][0];
         $Calendar = '<form action="'.$_SERVER['PHP_SELF'].($_SERVER['QUERY_STRING']?'?'.$_SERVER['QUERY_STRING']:'').'" method="post" id="calendar_'.$ID.'">
<table cellspacing="0" cellpadding="0" class="calendar"><thead>
<tr>'."n".'<th class="b">
<input type="submit" name="m" value="&#171;" class="p" /><br />
<input type="submit" name="y" value="&#171;" class="p" />
</th>'."n".'<th colspan="5" class="b">
'.$Months[$Date['mon']].'<br />'.$Date['year'].'
<input type="hidden" name="year" value="'.$Date['year'].'" />
<input type="hidden" name="month" value="'.$Date['mon'].'" />
<input type="hidden" name="day" value="'.$Date['mday'].'" />
<input type="hidden" name="id" value="'.$ID.'" />
</th>'."n".'<th class="b">
<input type="submit" name="m" value="&#187;" class="p" /><br />
<input type="submit" name="y" value="&#187;" class="p" />
</th>'."n".'</tr>'."n".'<tr>'."n";
         for ($i = 0; $i <= 6; $i++) $Calendar.= '<th title="'.$Days[($i + $DayWeekStarts - (($i + $DayWeekStarts > 7)?7:0))].'">'.substr ($Days[($i + $DayWeekStarts - (($i + $DayWeekStarts > 7)?7:0))], 0, 1).'</th>'."n";
         $Calendar.= '</tr>'."n".'</thead>'."n".'<tbody>'."n".'<tr>'."n".(($Offset > 0)?'<td colspan="'.$Offset.'" class="c">&nbsp;</td>'."n":'');
         for ($i = 1; $i <= $NumberOfDays; $i++) {
             $DayOfWeek = date (l, mktime (0, 0, 0, $Date['mon'], $i, $Date['year']));
             $Calendar.= (($DayOfWeekNum == $DayWeekStarts)?'<tr>'."n":'').'<td><input type="submit" name="d" class="'.((!empty ($Holidays[$Date['mon']][$i]))?(($i == $Date['mday'])?'t':'h'):(($i == $Date['mday'])?'t':((in_array (($i + $Offset) / 7, array (1,2,3,4,5,6)))?'h':((!empty ($ImportantDays[$Date['mon']][$i]))?'i':((in_array (($i + $Offset + 1) / 7, array (1,2,3,4,5,6)))?'s':'n'))))).'" title="'.((!empty ($Holidays[$Date['mon']][$i]))?$Holidays[$Date['mon']][$i].namedays ($i, $Date['mon'], $Path, 1):((!empty ($ImportantDays[$Date['mon']][$i]))?$ImportantDays[$Date['mon']][$i].namedays ($i, $Date['mon'], $Path, 1):namedays ($i, $Date['mon'], $Path, 0))).'" value="'.$i.'" /></td>'."n".(($DayOfWeekNum == ($DayWeekStarts - 1))?'</tr>'."n":'');
             if ($DayOfWeekNum == 7) $DayOfWeekNum = 1;
             else $DayOfWeekNum++;
             }
         if (!in_array (($Offset + $NumberOfDays) / 7, array (1, 2, 3, 4, 5, 6))) $Calendar.= ((((($Offset == 5) && ($NumberOfDays > 30)) || (($Offset == 6) && ($NumberOfDays > 29)) && (42 - $NumberOfDays - $Offset > 0)) || (($NumberOfDays != 28) || ($Offset > 0) && (35 - $NumberOfDays - $Offset > 0)))?('<td colspan="'.((($NumberOfDays != 28) || ($Offset > 0) && (35 - $NumberOfDays - $Offset > 0))?(42 - $NumberOfDays - $Offset):(35 - $NumberOfDays - $Offset)).'" class="c">&nbsp;</td>'."n".'</tr>'."n"):'</tr>'."n");
         return ($Calendar.'<tr>'."n".'<td colspan="7" class="b" style="font-size:12px;">'.$Days[$Date['wday'] + 1].', '.$Date['mday'].' '.$Months2[$Date['mon']].' '.$Date['year'].' r.<br />'.($Holidays[$Date['mon']][$Date['mday']]?'<b style="color:#F3333F;">'.$Holidays[$Date['mon']][$Date['mday']].'</b><br />':'').($ImportantDays[$Date['mon']][$Date['mday']]?'<b style="color:#333FF3;">'.$ImportantDays[$Date['mon']][$Date['mday']].'</b><br />':'').((file_exists ($Path.'1.inc'))?namedays ($Date['mday'], $Date['mon'], $Path, 0):'').'</td>'."n".'</tr>'."n".'</tbody></table></form>'."n".'<!-- Powered by eCalendar -->'."n");
         }
?>

Kod CSS (należy go umieścić pomiędzy znacznikami STYLE):

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
.calendar {
        border-top:1px solid black;
        border-right:1px solid black;
        text-align:center;
        width:144px;
        font-family:Arial, sans-serif;
        }
.calendar td {
        font-size:1px;
        }
.calendar td input {
        width:25px;
        border:0;
        border-bottom:1px solid black;
        border-left:1px solid black;
        color:black;
        font-size:12px;
        }
th {
        background:#DEDEDE;
        text-align:center;
        border-bottom:1px solid black;
        border-left:1px solid black;
        }
.n {
        background:#F0F0F0;
        }
.t {
        background:#CFFFFC;
        font-weight:bold;
        }
.h {
        color:#F3333F;
        font-weight:bold;
        background:#FFC00F;
        }
.i {
        color:#333FF3;
        font-weight:bold;
        }
.s {
        color:#399003;
        font-weight:bold;
        background:#F7E00F;
        }
.b {
        background:#E8E8E8;
        border-bottom:1px solid black;
        border-left:1px solid black;
        font-size:12px;
        }
.c {
        border-bottom:1px solid black;
        border-left:1px solid black;
        font-size:1px;
        }
.p {
        background:transparent;
        border:0;
        width:20px;
        font-weight:bold;
        }

Wywołanie funkcji kalendarza (pierwszy parametr: ID kalendarza (można umieszczać kilka kalendarzy o różnych ID i datach), drugi: data, która ma być wyświetlona w kalendarzu (opcja), trzeci: ścieżka do katalogu z bazą danych imion (opcja)):

1
<?= calendar ('pierwszy'); ?>

Ostatnia aktualizacja: sobota - 06.08.2005, 11.33

Mówienie bez myślenia to jak strzelanie bez celowania. Zbigniew Herbert