cal ist ein kleiner Event-Kalender für die eigene Homepage. Termine können auf einer Adminoberfläche oder wahlweise auch durch Besucher erfasst werden. Wiederkehrende Termine sind möglich. Einfache Installation. E-Mail Benachrichtigungen bei neuen, durch Benutzer eingetragenen, Terminen möglich. Unix/(Windows), deutsch, kostenlos.
Die Informationsseite zum Script inkl. Downloadmöglichkeit und Online-Demo finden Sie hier!
cal ist ein Event-Kalender für die eigene Homepage und bietet folgende Funktionen
Nebst Perl/CGI Unterstützung ist noch sendmail erforderlich. Ohne sendmail funktioniert der Kalender einwandfrei, nur die Benachrichtigung bei neuen Terminen ist nicht möglich. Zudem wird noch das Modul Time::Local benötigt, welches aber zum Standard-Umfang jeder Perl Distribution gehört.
Dieses Skript basiert auf den STANDARD-Lizenzbedinungen, die Sie unter http://www.cgicorner.ch/download/info.shtml oder in der Datei cgicorner.txt im ZIP-Archiv finden.
Folgende Dateien müssen kopiert und mit den entsprechenden Berechtigungen versehen werden:
|
|
Anmerkung: Die mit (*) gekennzeichneten Dateien befinden sich nicht im ZIP-Archiv und werden erst im Betrieb erstellt.
Um das Script aufzurufen, stehen folgende URLs zur Verfügung:
| /cgi-bin/cal/cal.cgi | zeigt den Kalender an (Link für Besucher; Details siehe Kapitel 4) |
| /cgi-bin/cal/cal.cgi?action=admin | Administrationsbereich. Sofern ein Passwort definiert ist, muss dieses eingegeben werden, bevor der Adminbereich angezeigt wird. |
Die Konfiguration der wichtigsten Einstellungen wird direkt im Script (cal.cgi) vorgenommen:
| $dataFile | Dateiname der Daten-Datei für einmalige Termine (UNIX-Pfad) |
| $nvDataFile | Dateiname der Daten-Datei von nicht validierten Terminen (Adminfreigabe noch erforderlich; UNIX-Pfad) |
| $rDataFile | Dateiname der Daten-Datei für wiederkehrende Termine (UNIX-Pfad) |
| $cacheFile | Dateiname für den Kalender-Cache (UNIX-Pfad) |
| $cacheFile1 | Dateiname für den Event-Cache auf der Hauptseite (UNIX-Pfad) |
| $calCSS | Dateiname zum CSS-Stylesheet für den DHTML-Kalender (Browser-Pfad) |
| $calJS | Dateiname zur JavaScript-Datei für den DHTML-Kalender (Browser-Pfad) |
| $calGIF | Dateiname zum Kalender-GIF (Browser-Pfad) |
| $cssFile | Dateiname zum CSS-Stylesheet (UNIX-Pfad) |
| $rcptMail | Mailadresse, an welche neue oder geänderte, durch Benutzer eingetragene, Events geschickt werden (optional) |
| $password | Passwort für die Adminoberfläche |
| $sendmail | Pfad zu sendmail (UNIX-Pfad) |
| $userAdd | 0=Benutzer dürfen keine eigenen Termine erfassen 1=Benutzer dürfen eigene Termine erfassen und die Termine sind sofort sichtbar 2=Benutzer dürfen eigene Termine erfassen, welche aber zuerst noch durch den Administrator freigegeben werden müssen ($rcptMail zwingend erforderlich!) |
| $alignFromRight | Definiert den Abstand des Kalenders zum rechten Rand. 0=linksbündig ausgerichtet. Rechtsbündige Ausrichtung mit Standard-Stylesheet: ca. 250. |
| $showEvents | Anzahl Termine, welche direkt auf der Hauptseite angezeigt werden |
| $buttonTextMonth | Text, für Such-Button (direkt zu bestimmten Monat springen). Leer=Button wird nicht angezeigt |
| $buttonTextBack | Text, für zurück-Button in Kalender |
| $buttonTextNext | Text, für weiter-Button in Kalender |
| $buttonTextToday | Text, für Button "Heute" in Kalender |
| $onChange | legt fest, ob der Kalender bei der Auswahl eines anderen Monats/Jahres im Dropdown-Feld automatisch neu geladen werden soll (ansonsten erst mit Klick auf Button) |
| $onMouseOver | definiert, ob die Termine bereits beim MouseOver über den entsprechenden Tag angezeigt werden sollen. 0=Funktion deaktiviert, 1=in Kalender und Detailansicht aktiviert, 2=nur in Kalender, 3=nur in Detailansicht |
| $markToday | hebt den aktuellen Tag farblich hervor, falls diese Option aktiviert wird. |
| $concurrentEvents | definiert, ob überlappende Termine möglich sind (Check erfolgt nur bei der Erfassung im Benutzerbereich; keine Kontrolle auf Konflikte mit wiederkehrenden Terminen) |
| $previewDays | Anzahl Tage, welche bei der Ansicht des Kalenders beim Start oder nach Klick auf [Heute] in der Terminliste berücksichtig werden sollen |
| $adminTimeSpan | Definiert, welche Monate im Adminbereich standardmässig dargestellt werden sollen. Enthält zwei Parameter: zuerst wird der anzuzeigende Startmonat definiert (0=aktueller Monat, -1=Vormonat, 1=nächster Monat etc.) nach dem Komma folgen dann die Anzahl Monate. Beispiel: "-1,3" zeigt von Vormonat 3 Monate an (also Vormonat, aktueller Monat und nächster Monat), "0,5" zeigt vom aktuellen Monat an 5 Monate an. |
| @cat | Definiert die vorhandenen Kategorien, mehr dazu im Kapitel 3.2 |
| $userCanChooseCat | Legt fest, ob Besucher die Kategorie ebenfalls zuweisen können (1), oder ob dies nur via Adminbereich möglich ist (0). |
Die Anpassung der Farben erfolgt im CSS-Stylesheet (style.css). Der Einsatzzweck der einzelnen CSS-Klassen ist direkt in dieser Datei dokumentiert.
Der Online Versions-Check ist eine einfache Möglichkeit, zu überprüfen, ob die eingesetzte Version noch aktuell ist.
Um den Versions-Check zu starten, muss man auf den Link bei der Versions-Nummer unten rechts klicken. Danach wird eine Verbindung mit dem Server von cgicorner.ch hergestellt. Dazu ist eine Internet-Verbindung notwendig.
Es wird nur die Versionsnummer sowie das letzte Änderungsdatum an den Server von cgicorner.ch übermittelt. cgicorner.ch garantiert, dass keine weiteren Konfigurationseinstellungen oder Benutzerdaten gesendet werden. Der Browser übermittelt möglicherweise noch den Referer, der mögliche Informationen über den Einsatzort liefert. Wenn Sie dies nicht möchten, installieren Sie eine Personal-Firewall, welcher die Referer-Informationen blockiert oder kopieren Sie den Link in die Zwischenablage und fügen Sie ihn manuell in die Browser-Adressleiste ein.
In cal können mehrere Terminkategorien definiert werden, welche dann der Besucher und/oder Administrator einem Termin zuweisen kann. Diese Terminkategorien müssen im CSS-Stylesheet konfiguriert sein und können so in einer anderen Farbe, einer anderen Schrift etc. dargestellt werden. Um eine eigene Kategorie zu definieren sind zwei Schritte notwendig:
Um nebst "Wichtig" noch eine Klasse "gruen" und "dies ist blau" hinzuzufügen, muss also folgendes in die cal.cgi eingetragen werden: push(@cat, "Wichtig","gruen","dies ist blau");
Ebenfalls muss die style.css noch um zwei Klassen ergänzt werden:
td.sbdetgruen {
border-right: 1px solid #000000;
border-bottom: 1px solid #000000;
background: #aaffaa;
}
td.sbdetdiesistblau {
border-right: 1px solid #000000;
border-bottom: 1px solid #000000;
background: #aaaaff;
}
Ein Schreibzugriff auf die Datenbank führt eine Sperrung der Datenbank für weitere Zugriffe aus. Dadurch kann ein allfälliger Datenverlust durch zwei gleichzeitige Schreibzugriffe auf die Datenbank ausgeschlossen werden. Der Benutzer erhält eine Fehlermeldung, dass die Datenbank zur Zeit gerade durch einen anderen Benutzer gesperrt sei.
Falls die Datenbank nach einem Script-Absturz einmal dauerhaft gesperrt sein sollte, muss die .lock-Datei von Hand gelöscht werden (Lockdatei für data/cal.dat ist data/cal.dat.lock). Vor der manuellen Freigabe sollte geprüft werden, ob eine .tmp-Datei vorhanden ist und diese ggf. aktuellere Daten enthält. Falls ja, sollte diese Datei in den Namen der Datendatei umbenannt werden (z.B. data/cal.dat.tmp nach data/cal.dat umbenennen).
Es gibt zwei Möglichkeiten, den Kalender in die eigene Homepage einzubinden.
Der Kalender lässt sich mittels eines IFRAMES in eine bestehende Seite einbinden. Breite und Höhe sind Richtwerte und müssen evtl. je nach Anzahl Termine auf der Hauptseite und Schriftgrösse angepasst werden.
<iframe src="/cgi-bin/cal/cal.cgi" width="250" height="500" name="calendar" frameborder="0" scrolling="no"> Ihr Browser unterstützt keine IFRAMES. <a href="/cgi-bin/cal/cal.cgi" target="_blank">Klicken Sie hier, um den Kalender in einem eigenen Fenster darzustellen</a> </iframe>
Gerade bei der Verwendung der ToolTip-Funktion ist es von Vorteil, das IFRAME etwas bereiter zu machen und so zu verhindern, dass dei Tips abgeschnitten werden. Dazu kann das IFRAME transparent gestaltet und über eine grössere Fläche gelegt werden.
style.css
body {
background: #transparent;
}
Der Internet-Explorer benötigt im IFRAME-Tag noch ein Attribut allowTransparency="true".
Etwas komplizierter wird es, wenn nicht ausreichend Platz zur Verfügung steht und der Kalender rechtsbündig über bestehenden Text gelegt werden soll (Beispiel siehe Download-Seite von cal, http://www.cgicorner.ch/download/cal.shtml).
Auch hier ist die Anpassung des Stylesheets mit dem transparenten Body wieder erforderlich. Der Code für das IFRAME ist aber etwas komplizierter:
<div style="float: right; width:260px; height:500px;"> </div> <div style="position: absolute; right: 0px; width: 680px; margin: 0px; z-index: 1;"> <iframe src="/cgi-bin/cal/cal.cgi" width="680" height="500" name="calendar" frameborder="0" title="cal" longdesc="Webkalender" allowTransparency="true" scrolling="no"> Ihr Browser unterstützt keine IFRAMES. <a href="/cgi-bin/cal/cal.cgi" target="_blank"> Klicken Sie hier, um den Kalender in einem eigenen Fenster darzustellen</a></iframe> </div>
Hierbei werden zwei DIV-Tags erstellt: der erste hat die Breite des Kalenders und verdrängt den Text. Breite und Höhe müssen ggf. angepasst werden.
Der zweite DIV-Tag ist deutlich grösser (700px) und liegt transparent über dem Text. Zusammen mit einem $alignFromRight=250 führt dies dazu, dass der Kalender mit einer Breite von 250 Pixel am rechten Rand dargestellt wird (also dort, wo der erste DIV-Tag den Platz dafür freigemacht hat), jedoch das IFRAME deutlich breiter ist und Tool-Tips problemlos Platz haben.
WICHTIG: Der DIV-Tag ist zwar transparent, liegt aber über dem bestehenden Text. An der Stelle, an der der DIV-Tag über dem Text liegt können keine Links angeklickt werden!
<script language="JavaScript" type="text/javascript">
function PopUpFenster(url,framename,width,height,xpos,ypos) {
if ( navigator.appName == "Netscape" ) {
width = width + 14;
height = height + 14;
var attributes = "menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1,WIDTH=" + width + ",HEIGHT=" + height + ",screenX=" + xpos + ",screenY=" + ypos;
var showpic = window.open(url,framename, attributes);
} else {
width = width + 14;
height = height + 14
var attributes = "menubar=no,toolbar=no,status=no,scrollbars=yes,resizable=yes,WIDTH=" + width + ",HEIGHT=" + height + ",screenX=" + xpos + ",screenY=" + ypos;
var showpic = window.open(url,framename, attributes);
}
}
</script>
Danach kann der Kalender mit folgendem Link aufgerufen werden:
Breite und Höhe sind Richtwerte und müssen evtl. je nach Anzahl Termine auf der Hauptseite und Schriftgrösse angepasst werden.
| Copyright © 2008 by Jürg Sommer, scripts@cgicorner.ch http://www.cgicorner.ch |
Letzte Änderung: 2. August 2008 |