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.
Beispiel: Ein Terminplan, bei dem Mitarbeiter oder Zimmer an einzelnen Tagen belegt sind.
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.
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.
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.
absolute-table week-table hour-table absolute-max-registrations absolute-query hour-list
2;Montag;3;Dienstag;4;Mittwoch;5;Donnerstag;6;Freitag;7;Samstag;1;Sonntagdeklariert sein. Die Kombination 1;Sonntag kann auch an den Anfang der Liste gestellt werden.
sd:start-time='08:00'Es werden die Zeitpunkte ab 08:00 ausgegeben.
sd:end-time='20:00'
<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.