Ermöglicht das Einfügen eines Kalender-Elements.
Der Grundtyp wird über das
sd:table-type
-Attribut festgelegt. Es sind die drei Typen
absolute-table, week-table und hour-table zulässig. Die einfache Variante wird in den Beispielen
Zimmerbelegungen und
mehrere Zimmer genutzt.
Die - sehr komplexen und aufwendigen - beiden anderen Varianten, welche die Definition von fünf Tabellen erfordern,
liegen dem Beispiel
Termine online reservieren
zugrunde.
1. Verwendung als absolute-table
In diesem Fall ist das
sd:table
-Attribut mit einer Tabelle belegt, die absolute Datumsangaben enthält.
Das Kalenderelement listet zunächst alle Tage eines Monats auf. Nun sind zwei Verwendungsmöglichkeiten denkbar:
- Dem Element sind die Tabelle und eine Datumsspalte über das sd:begin-col
-Attribut aus dieser Tabelle zugeordnet.
Das sd:end-col
-Attribut wird nicht verwendet.
Dann werden die in dieser Spalte enthaltenen Werte mit dem Flag 1 ausgegeben. Diesem Flag ist ein
<sd:single-daysd:element-type
='free'> - Element zugeordnet, das die Formatierung
für diese Variante festlegt.
Beispiel: Ein Terminplan, bei dem Mitarbeiter oder Zimmer an einzelnen Tagen belegt sind.
- Dem Element ist eine Tabelle mit zwei Datumsspalten (sd:begin-col
und sd:end-col
)
zugeordnet. Die Spalten legen Beginn und Ende von Zeiträumen fest. Alle Tage innerhalb dieser Zeiträume werden
über das <sd:single-daysd:element-type
='free'> formatiert ausgegeben.
Beispiel: Die Tabelle sammelt die Urlaubszeiten von Mitarbeitern mit Spalten 'Urlaubsbeginn' und 'Urlaubsende'.
Dann werden nicht nur die Beginn/Ende-Tage, sondern auch alle dazwischen liegenden Tage gesondert formatiert
ausgegeben.
Der Unterschied zwischen beiden Varianten besteht nur darin, daß bei der ersten Variante das Attribut
sd:end-col
fehlt. Für die weitere Datenpflege genügt es, in der Tabelle solche Zeilen
mit weiteren Datumsangaben einzutragen. Beim Aufruf der Ausgabeseite enthält diese die Tagesumsetzung.
Ist das
sd:filter-col
-Attribut angegeben, so muß die zugeordnete
Tabelle eine Spalte mit dem Wert dieses Attributes enthalten. Damit ist die Tabelle Detailtabelle in bezug auf eine
Grundtabelle und faßt bsp. die Urlaubsdaten vieler Mitarbeiter (Grundtabelle: 'Mitarbeiter', Detailspalte 'MitarbeiterId')
oder die Belegung vieler Ferienwohnungen zusammen (Grundtabelle: 'Ferienwohnungen', Detailspalte 'FerienwohnungenId').
In diesem Fall werden nur die Zeilen ausgewertet, welche zum übergebenen Wert (ein Mitarbeiter, eine Ferienwohnung) gehören.
Der Wert kann entweder durch das
sd:with-param
-Element statisch vorgegeben werden. In diesem Fall zeigt
eine Ausgabeseite immer das Ergebnis für einen Mitarbeiter / eine Ferienwohnung an. Alternativ kann der Wert
durch ein
sd:input-text
-Element eingegeben werden, welchem ein
sd:param
-Element zugewiesen ist.
Wird beim
sd:param
-Element das
sd:relation
-Attribut mit
dem Namen der Relation belegt, welche die Detailtabelle mit der Grundtabelle verknüpft, so wird das
sd:input-text
-Element
als Pulldown-Liste mit den üblichen Daten der Grundtabelle ausgegeben. Ein Beispiel für diese letzte Lösung ist unter
mehrere Zimmer (auf beispiel.server-daten.de)
zugänglich.
Das sd:calendar-Element muß ein
sd:month-row
-Element enthalten. In Abhängigkeit von der Zahl der auszugebenden
Monate (von sd:start-date bis sd:end-date) und der Zahl der Monate pro Zeile (Wert von
sd:months-per-row
)
wird dieses Element entsprechend häufig aufgerufen. Es ruft seinerseits für jeden Monat der aktuell auszugebenden Zeile
einmal das
sd:month-element
-Element auf, das die Formatierung für einen Monat festlegt.
Falls
sd:months-per-row
= 1, so wird nur ein Monat pro Zeile ausgegeben. Hier sollte das
sd:month-row
-Element ein <p>-Element enthalten. Falls der Attributwert > 1 ist, wird eine Blindtabelle
mit der passenden Zahl von Zeilen und Spalten erzeugt. Dies ist die bevorzugte Variante, falls ein Monat in Wochenform
ausgegeben und mehrere Monate nebeneinander postiert werden.
Die Entscheidung, ob der Monat als einfache Liste von Tagen oder vorformatiert als Wochenblock ausgegeben wird, wird erst
innerhalb des
sd:day-list
-Elements getroffen.
2. Verwendung als week-table
In diesem Fall bezeichnet das
sd:table
-Attribut eine Tabelle mit Wochenangaben: Eine Liste von Tagen
(1 - 7 als einfache Pulldown-Liste,
sd:week-day
), zwei Spalten 'Beginn' (
sd:begin-col
) und 'Ende'
(
sd:end-col
), die nur Zeitangaben enthalten. Dies entspricht
der Variante, daß bsp. eine Arztpraxis ihre wöchentlichen Öffnungszeiten mitteilt: Montags von 09:00 - 12:30, mittwochs von
08:00 - 12:00 und von 14:00 - 18:00 usw. Das
sd:skip-table
-Attribut benennt eine Tabelle mit Sperrzeiten
(Praxisschließung, einzelne Tage für Fortbildungen), die einer Tabelle für den Kalendertyp 'absolute-table' entspricht.
Ferner ist im Attribut
sd:duration-table
eine Tabelle für Termintypen und im Attribut
sd:duration-col
eine Spalte dieser Tabelle mit Längen (als Ganzzahl = Zahl der Viertelstunden dieses Termins) festzulegen. Diese Tabelle
wird genutzt, um dem Nutzer eine Vorauswahl zu ermöglichen (einen Termin von einer Stunde) und um die freien Zeiträume
entsprechend einzuschränken.
Die eigentliche Termintabelle wird im Attribut
sd:appointment-table
festgelegt. Hier enthält die durch
sd:appointment-duration-col
festgelegte Spalte den Wert eines Fremdschlüssels auf die Termintypen-Tabelle,
sd:appointment-begin-col
erfaßt den Beginn des Termins. Das
sd:appointment-filter-col
-Attribut
kann eine Filterbedingung festlegen, um bsp. die Termine für verschiedene Mitarbeiter voneinander abzugrenzen.
3. Verwendung als hour-table
Diese Variante nutzt dieselben Attribute wie bei der Verwendung als week-table. Allerdings werden nicht mehrere Tage, sondern
nur die Viertelstunden von einem Tag über das
sd:single-day
-Element mit dem
sd:hour-list
-Element
ausgegeben.
Das folgende Beispiel listet den Quellcode von
mehrere-Zimmer.html.
Der obere Teil zeigt, wie dem
sd:param
-Element eine Relation zugewiesen und ein Eingabefeld mit Button erzeugt wird.
<sd:param sd:name="myParam"
sd:relation="fk_zimmerbelegungen_zimmerliste"
sd:datatype="int" />
<sd:form sd:name="myForm">
<div class="sd-input-part">
<div class="sd-input">
<sd:input-text sd:param-name="myParam" />
<div class="sd-button-list">
<span style="padding:3px">
<sd:button sd:name="myButton">
<sd:label-standard>Ausführen</sd:label-standard>
</sd:button>
</span>
<span style="padding:3px">
<sd:button sd:name="reset">
<sd:label-reset>Reset</sd:label-reset>
</sd:button>
</span>
</div>
<p />
<span class="sd-error"><sd:err-message /></span>
<p />
</div>
</div>
<sd:calendar sd:name="myCalendar" sd:table="zimmerbelegungen"
sd:begin-col="belegungbeginn" sd:end-col="belegungende"
sd:months-per-row="2" sd:filter-col="zimmerlisteId"
sd:start-date="2005-01-01" sd:end-date="2005-03-31">
<sd:with-param sd:sql-param="@zimmerlisteId"
sd:param-name="myParam" />
<sd:month-row>
<sd:month-element style="vertical-align:top;">
<div
style="text-align:center;font-weight:bold;margin-bottom:6px;">
<sd:month-name sd:month-format="MMMM" />
</div>
<sd:day-list sd:month-style="as-week">
<sd:single-day sd:element-type='free'
style="background-color:#da0000;text-align:center;">
<sd:day />
</sd:single-day>
<sd:single-day sd:element-type='other'>
<sd:day />
</sd:single-day>
</sd:day-list>
</sd:month-element>
</sd:month-row>
</sd:calendar>
</sd:form>
Das Kalenderelement nutzt das Attribut sd:months-per-row mit dem Wert 2, so daß eine
zweispaltige Blindtabelle für zwei Monate nebeneinander eingefügt wird. Dies wird durch das
sd:month-row
-Element
implizit erledigt. Anschließend wird nur ein einziges
sd:month-element
-Element deklariert. Dieses fügt
implizit eine Tabellenzelle ein. Die hier festgelegte Formatierung 'style="vertical-align:top;"' wird an die Zelle
weitergereicht. In einer Zelle wird der Monatsname zentriert und fett ausgegeben, hier mit dem Langformat 'MMMM'.
Das
sd:day-list
-Element nutzt 'sd:month-style="as-week"' und fügt damit eigenständig Blindtabellen mit einzelnen
Wochen ein. Hier müssen nur noch die verschiedenen Definitionen für die
sd:single-day
-Elemente festgelegt
werden. Diese Elemente enthalten schließlich das eigentliche
sd:day
-Element, welches das konkrete Tagesdatum ausgibt.
Anstelle der Formatierung mit 'style' sollten üblicherweise natürlich CSS-Klassen verwendet werden.
Kontaktformular:
Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!