Location: PHPKode > scripts > servertime > servertime/liesmich.txt
servertime class liesmich.txt doc file
Peter Klauer, 7. September 2003
hide@address.com

Änderungen:
26. Oktober   2003: Optionaler Start aus dem Body-Tag mit onload="clock()"
                    (s. Synchronisierung)
 3. Oktober   2003: Neues Feature $offset_hours. Idee von Martin Link.
 1. Oktober   2003: Neue Sprache "french" von Eric Mathieu
25. September 2003: Neuer Schalter $ucaseampm für groß- oder kleingeschriebenes
                    am/pm. Neues Feature: Alarmzeiten und Ausgabe von 
                    Alarmmeldungen über eine benutzerdefinierbare php-Seite.
                    Neue Variablen: $alarmon, $alarmdate, $alarm, $onalarm, 
                    $alarmpage. Ideen und Codeanregungen von Paul Hargreaves.
10. September 2003: Neue Schalter military und showdate von Paul Hargreaves
11. September 2003: Neuer Abschnitt "Synchronisierung"

Folgende Themen werden in diesem Dokument behandelt:

Klassenfunktionen
Klassenvariablen
Beispiel
Synchronisierung

Die Klasse heisst "Servertime" und zeigt annähernd die Zeit des Servers, von 
welchem aus sie gestartet wurde. Wenn $offset_hours definiert wurde, wird Zeit
und Datum plus $offset_hours gezeigt. Javascript muss beim Client aktiviert sein, 
damit die Uhr funktioniert. Die Zeit wird digital als Text innerhalb eines <div>
Tags dargestellt. Die Serverzeit wird nicht in Echtzeit angezeigt: Bis zur
Übernahme der Zeit und dem Start der Uhr vergeht, abhängig von der Komplexität
der Seite, eine gewisse Zeitspanne. Danach läuft die Uhr mit lokaler Geschwindig-
keit weiter. Bitte lesen Sie dazu den letzten Abschnitt "Synchronisierung".

Das Feature "Alarmzeiten" erlaubt, für verschiedene Tage und Uhrzeiten bestimmte
Ereignisse anzukündigen. So kann z.B. eine Seite eines Sportvereins abhängig
von den Alarmzeiten online den aktuellen Beginn eines Heimspiels ankündigen. 

Auf der Seite
http://www.ingoknito.de/scripts/servertime/index.php
können Sie ein paar Einstellungen der Klasse testen.

********************************************************************************
********************************************************************************
Klassenfunktionen in servertime:
********************************************************************************
********************************************************************************

InstallClockHead()
InstallClock()
InstallClockBody()
Help()

********************************************************************************
function servertime::InstallClockHead()
********************************************************************************

Diese Funktion muss in der <head>-Sektion der Seite untergebracht werden. Sie
installiert das Array mit den Monatsnamen, den Startwert für die Zeitvariable
"digital", der die aktuelle Zeit vom Server erhält und eine ziemlich weit
verbreitete Funktion "writeLayer", die den Inhalt der Uhr in die Seite schreibt.
Ich fand diese Funktion an mehreren Stellen und kann nicht mehr sagen, wo ich
sie her habe.

Bei
http://beta.experts-exchange.com/Web/Web_Languages/JavaScript/Q_20631686.html

werden Sie eine ähnliche Funktion finden, aber von dort habe ich sie nicht.
Mit der Javascript Console vom Mozilla wurde die Funktion und die Klasse so
lange überarbeitet, bis keine Warnungen mehr erschienen. Die Klasse erzeugt
keinen einzigen Eintrag in der Javascript Console, wenn sie korrekt installiert
ist.

Die folgenden Klassenvariablen veranlassen InstallClockHead() dazu, etwas zu tun:

language shorthmonth showdate onalarm alarmon offset_hours

Die folgende Variable wird auf TRUE gesetzt, wenn InstallClockHead() läuft:

ok_head

********************************************************************************
function servertime::InstallClock()
********************************************************************************

Diese Funktion wird dort platziert, wo die Uhr erscheinen soll. Sie muss nach
InstallClockHead() und vor InstallClockBody() gesetzt werden.

Die folgenden Klassenvariablen veranlassen InstallClockHead() dazu, etwas zu tun:

divclass divstyle divtag divid title ok_head
onalarm alarmon alarmpage alarmpagew alarmpageh alarmpageopts

Die folgende Variable wird auf TRUE gesetzt, wenn InstallClock() läuft:

ok_clock

********************************************************************************
function servertime::InstallClockBody()
********************************************************************************

Diese Funktion muss dicht ans Ende der Seite gesetzt werden. Sie installiert
die Javascript Funktion "clock()" und den ersten Aufruf dieser Funktion.
Eine der Verbesserungen dieser Klasse gegenüber dem alten Skript ist, dass kein
Kickstarter im <body>-Tag mehr gebraucht wird: <body onload="clock()"> ist
nicht mehr erforderlich.


Die folgenden Klassenvariablen veranlassen InstallClockHead() dazu, etwas zu tun:

language military showdate ok_head ok_clock
alarm alarmon onalarm alarmdate ucaseampm

********************************************************************************
function servertime::Help()
********************************************************************************

Das ist nur eine kleine Extrafunktion für den Fall, dass diese liesmich.txt-
Datei verloren gegangen ist. 

********************************************************************************
********************************************************************************
Klassenvariablen
********************************************************************************
********************************************************************************

divid        string    Enthält den id-Namen des Uhren-Tags.
                       'Pendule' ist der Vorgabewert.
                           
divstyle     string    Enthält den Vorgabewert für den css-Style-String für den
                       Uhren-Tag.
                       'position:absolute;' ist der Vorgabewert, damit auch der
                       NS 4.7 funktioniert. Ich glaube, das ist veraltet und
                       kann mit '' überschrieben werden. Tatsächlich veranlasst
                       dieser Vorgabewert manche Browser dazu, die nächste der
                       Uhr folgenden Zeile zu überschreiben, wenn dieser Vorgabe-
                       wert beibehalten wird. Aber ich bin noch nicht bereit,
                       den NS 4.7 aus der Liste der unterstützten Browser zu
                       streichen. Sie können es selbst tun, indem Sie den Wert
                       '' hier einsetzen. 
divtag       string    Hält die "Rasse" des Html-Tags. Vorgabe ist 'div',
                       aber 'span' wäre auch denkbar.
divclass     string    Kann einen Klassennamen für den divtag aufnehmen. Diese
                       Klasse muss in einem externen Style Sheet oder in der
                       <head>-Sektion der Seite definiert werden. Vorgabewert
                       ist ein leerer String '': Keine Klasse definiert.
title        string    Das ist ein kurzer Text der der Zeit vorangestellt wird.    
                       'Serverzeit: ' ist der Vorgabewert.
                       Sie können hier alles mögliche eintragen.
                       Mein Tipp: Ein Leerstring ''
language     string    Enthält die Spracheinstellung für das Datumsformat und
                       die Monatsnamen. 'german' (deutsch) ist der Vorgabewert. Andere
                       Sprachen sind 'french' für französisch und 'english' für
                       englisch.    
shortmonth   bool      Wenn TRUE, dann werden die Monatsnamen nur noch 3 Zeichen
                       lang dargestellt. Wenn FALSE, dann wird der ganze Monats-
                       name angezeigt. FALSE ist der Vorgabewert.
military     bool      Wenn TRUE, dann wird die Zeit im 24-Stunden-Format
                       angezeigt. Bei FALSE im 12-Stunden-Format. Ist die
                       "language" nicht "german", dann wird "am" oder "pm"
                       angehängt. Vorgabe: TRUE.
showdate     bool      Wenn TRUE, dann wird Tag, Monat und Jahr gezeigt. Bei
                       FALSE wird kein Datum angezeigt. Vorgabe: TRUE                                              
ucaseampm    bool      Soll am/pm in Großbuchstaben gezeigt werden?
                       Vorgabe ist TRUE.
                             
alarm        array     Array von Zeit-Werten im 24h (military) Format, die 
                       entweder ohne Datum oder mit Datum sind. Wenn das Datum
                       dabei ist, dann ist das Format "JJJJ-MM-DD HH:mm".
                       
                       Grundformat für Einträge ist:
                       
                          $st->alarm['HH:mm'] = 'Anzuzeigende Meldung';
                       
                       Beispiel: 
                       
                       mit Datum (alarmdate = true)
                       
                          $st->alarm["2003-09-19 01:25"] = "1st+alarm";
                       
                       ohne Datum (alarmdate = false)
                       
                          $st->alarm["01:25"] = "1st+alarm";
                       
alarmdate    bool      Hinweis für die Klasse, dass das Array "alarm" Datums-
                       einträge enthält, wenn auf TRUE. Vorgabe = FALSE.
alarmon      bool      Die Klasse versucht, Alarmmeldungen anzuzeigen, wenn TRUE.
                       Vorgabe = FALSE.
onalarm      string    Name einer Javascript-Alarm-Funktion. Vorgabe ist die
                       Funktion der Klasse "doAlarm", aber es darf auch eine
                       eigene Funktion, die außerhalb der Klasse definiert wird,
                       angegeben werden.
alarmpage    string    Name einer Seite, die die Alarmmeldung ausgeben wird und
                       von doAlarm() geladen wird. Vorgabe: "alarm.php". Wenn
                       alarmon TRUE ist und onalarm gleich "doAlarm", dann wird
                       die Seite "alarmpage" gesucht und der Skript abgebrochen,
                       wenn diese Seite nicht gefunden wird.
alarmpagew   integer   Breite der Alarmseite in Pixel. Vorgabe: 200.
alarmpageh   integer   Höhe der Alarmseite in Pixel. Vorgabe: 200.
alarmpageopts string   Zusatzoptionen. Vorgabe: "scrollbars=yes, resizable=yes"
offset_hours integer   Diese Variable verändert den Stundenwert der Anzeige.
                       Eine beliebige (vernünftige) Integerzahl darf hier 
                       angegeben werden (positiv oder negativ). Der Datumsanteil 
                       der Ausgabe wird bei Bedarf geändert. Vorgabewert ist 0.
bodyonload   bool      Die Variable MUSS NUR DANN auf true gesetzt werden, wenn 
                       die Javascript-Funktion clock() vom Programmierer bereits 
                       im <body>-Tag mit <body onload="clock()"> aufgerufen 
                       wurde. Dann wird der Aufruf von clock() in 
                       InstallClockBody() unterdrückt.
                        
                       Fehlerbild 1: Die Uhr läuft mit doppelter
                       Geschwindigkeit, wenn das Setzen dieser Variable
                       vergessen wurde und <body onload="clock()"> benutzt wurde.
                        
                       Fehlerbild 2: Die Uhr läuft überhaupt nicht, wenn die
                       Variable auf true gesetzt wurde, aber der Start der
                       Funktion clock() im <body onload="clock()"> vergessen
                       wurde. 
                       Vorgabewert: False.                                              
                       
ok_head      bool      Nicht anfassen. Das ist ein Versuch, die Installation der
                       Klasse zu vereinfachen.
ok_clock     bool      Nicht anfassen. Das ist ein Versuch, die Installation der
                       Klasse zu vereinfachen.
                                               
                     
********************************************************************************
********************************************************************************
Beispiel:
********************************************************************************
********************************************************************************
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test Servertime Klasse</title>
<?php

include 'inc_servertime.php';
$st = new servertime;

$st->InstallClockHead();

?>
</head>
<body>
<?
$st->InstallClock();

$st->InstallClockBody();
?>
</body>
</html>

********************************************************************************
********************************************************************************
Synchronisierung:
********************************************************************************
********************************************************************************
Zunächst erhält Servertime die Serverzeit. Javascript wird dann gestartet, wenn 
die gesamte Webseite geladen ist. Das kann zu Verzögerungen führen, bis die Uhr 
dann losläuft. Wenn die Uhr endlich läuft, dann läuft sie mit der 
Geschwindigkeit, die der Rechner des Surfers hat. Meistens haben die 
Heimarbeitsplätze den Wunsch, die Uhr wieder einzuholen. 
Sie schaffen etwa 5 Minuten pro Stunde. 
Um vor- oder nachgehende Heimstationen wieder mit der Serverzeit des Servers 
abzugleichen, ist es eine gute Idee, den Skript alle paar Minuten (dieses
Beispiel hier tut es alle 2 Minuten) per 

<meta http-equiv="refresh" content="120" /> 

wieder mit dem Server in Gleichklang zu bringen. Die Zeile 
<meta http-equiv="refresh" content="120" /> muss im <head>-Abschnitt der Seite
untergebracht werden. Beachten Sie bitte, dass beim Neuladen der Seite der
Benutzer durch ein eventuelles "Springen" an den Seitenanfang in seiner
Betrachtung der Seite gestört werden könnte.

Schnellere Startzeiten kann man unter Umständen erzielen, indem man den Start
der Javascript-Uhr mit dem Aufruf der Funktion clock() im <body>-Tag der Seite
per <body onload="clock()"> erzwingt. Dann muss der Klasse noch mitgeteilt
werden, dass der Aufruf bereits erfolgt ist, sonst läuft die doppelt so
schnell! Für den <body onload...> müsste das obige Beispiel so abgeändert
werden:

...
<body onload="clock()">
<?
$st->bodyonload = true;
$st->InstallClock();
...
 
Return current item: servertime