Das sd:calendar- Element

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.
Typ
Attribute
sd:name *
Legt den Namen des Objektes fest. Dieses Attribut ist immer ein Pflicht-Attribut.
sd:table-type *
Legt den Grundtyp des Kalenderelements fest. Gültige Werte sind
absolute-table
week-table
hour-table
absolute-max-registrations
absolute-query
hour-list
sd:start-date *
Legt das Startdatum für den Kalender fest. Das Datum wird einmalig beim Speichern der Seite ausgelesen und gesondert in der Datenbank im Datumsformat gespeichert. Wird für das Startdatum '2006-01-01' und für das Enddatum '2006-03-31' angegeben, so werden die drei Monate Januar / Februar / März 2006 verarbeitet.
sd:end-date *
Legt das Enddatum für den Kalender fest.
sd:table *
Legt den Namen der Tabelle fest, welche für den Kalender ausgewertet wird. Die Tabelle muß die beiden mit sd:begin-col / sd:end-col festgelegten Spalten, gegebenenfalls die sd:filter-col-Spalte enthalten.
sd:begin-col
Dieses Attribut muß mit dem Namen der ersten Datumsspalte belegt werden. Bsp.: 'Urlaubsbeginn'.
sd:end-col
Dieses Attribut muß mit dem Namen der zweiten Datumsspalte belegt werden. Bsp.: 'Urlaubsende'. Fehlt dieses Attribut, so werden nur die Werte aus der mit sd:begin-col bezeichneten Spalte gesondert formatiert ausgegeben. In diesem Fall findet keine Berechnung von Bereichen statt.
sd:filter-col
Falls dieses Attribut belegt ist, muß der Wert gleich dem Spaltennamen in der zugeordneten Tabelle sein. Diese Spalte muß vom Typ Integer sein. Es wird nun nicht die gesamte Tabelle, sondern nur die Zeilen verarbeitet, welche in der 'sd:filter-col'-Spalte den Wert haben, welcher durch das sd:with-param -Element übergeben wurde. Falls eine solche sd:filter-col-Spalte definiert wurde, jedoch kein Wert übergeben wurde, so wird keine Zeile der Kalendertabelle verarbeitet. Der Kalender bleibt ohne Hervorhebungen.
sd:week-day
Bezeichnet eine Spalte innerhalb der durch sd:table festgelegten Tabelle, welche die Information zum Wochentag bereitstellt. Diese Spalte muß als 'int'-Spalte mit den Werten
2;Montag;3;Dienstag;4;Mittwoch;5;Donnerstag;6;Freitag;7;Samstag;1;Sonntag
deklariert sein. Die Kombination 1;Sonntag kann auch an den Anfang der Liste gestellt werden.
sd:months-per-row
Legt fest, wieviele Monate pro Zeile ausgegeben werden. Ist der Wert gleich 1, so werden keine zusätzlichen Html-Elemente eingefügt. Ein Wert größer 1 erzeugt eine passende Blindtabelle und trägt die Monatselemente entsprechend ein.
sd:skip-table
Name einer Sperrtabelle
sd:skip-begin-col
Das Attribut muß eine Spalte benennen, welche den Beginn eines Sperrzeitraums festlegt. Fehlt ein Wert in der durch sd:skip-end-col bezeichneten Spalte, so wird nur der einzelne Tag des Sperrzeitraums blockiert.
sd:skip-end-col
Das Attribut benennt eine Spalte, die das Ende des Sperrzeitraumes festlegt.
sd:skip-filter-col
Mögliche Filterspalte, falls bsp. zwischen globaler Praxisschließung und einer Fortbildung eines einzelnen Mitarbeiters unterschieden werden soll.
sd:duration-table
Wird für die beiden Typen week-table/hour-table genutzt und erfordert den Namen einer Zeitdauer/Termintyp-Tabelle.
sd:duration-col
Hier ist der Name einer Spalte in der sd:duration-table notwendig. Diese Spalte muß die Länge des Termins als Ganzzahl in Viertelstunden-Einheiten enthalten.
sd:appointment-table
Name der Tabelle mit den tatsächlich vereinbarten Terminen. Enthält diese Tabelle keine Zeilen, so werden alle Tage bzw. alle Stunden als 'frei' ausgegeben.
sd:appointment-begin-col
Name einer Datumsspalte innerhalb der sd:appointment-table . Dies markiert den Beginn des Termins.
sd:appointment-duration-col
Name einer Fremdschlüsselspalte innerhalb der sd:appointment-table , die auf eine Zeile in der Termintypen / sd:duration-table - Tabelle verweist. Anhand des zugeordneten Wertes in der sd:duration-col -Spalte wird die Zeitdauer des Termins ermittelt.
sd:appointment-filter-col
Name einer Filterspalte innerhalb der sd:appointment-table . Diese kann bsp. auf eine Personentabelle verweisen, um Termine von verschiedenen Personen zu unterscheiden.
sd:appointment-expression
Ausdruck, der dem Namen einer Textspalte oder eines komplexeren Ausdrucks entsprechen kann. Die Spalten müssen innerhalb der sd:appointment-table definiert sein. Der Wert wird ausgegeben, falls das Kalenderelement vom Typ 'hour-list' ist.
sd:appointment-expression-2
Weitere Ausgabespalte
sd:appointment-expression-3
Weitere Ausgabespalte
sd:flag-expression
Sonderausdruck
sd:appointment-day-col
Benennt die Spalte in der Appointment-Tabelle, welche die Tagesangabe enthält.
sd:appointment-min-user-col
Falls der Kalender eine Anmeldung ermöglichen soll und falls pro Termin minimal viele Teilnehmer notwendig sind, wird dieses Attribut mit dem Namen der Spalte belegt, welche diesen Minimalwert bereitstellt.
sd:appointment-max-user-col
Ermöglicht der Kalender eine Anmeldung und gibt es für einen Termin eine Maximalzahl von Teilnehmern, dann wird dieses Attribut mit dem Spaltennamen belegt, der den Maximalwert bereitstellt.
sd:appointment-max-waiting-col
Bei Kalendern zur Anmeldung kann hier eine Spalte angegeben werden, die einen Wert zur maximalen Länge der Warteliste enthält.
sd:registration-main-table-col
Falls der Kalender vom Typ 'absolute-max-registrations' ist, dann benennt das Pflichtattribut sd:table die Tabelle mit den Einzelanmeldungen. Die im sd:registration-main-table-col benannte Spalte enthält den Fremdschlüssel für die im sd:appointment-table -Attribut benannte Tabelle.
sd:registration-user-id-col
Für den Kalender vom Typ 'absolute-max-registrations' benennt diese Spalte die Spalte mit User-IDs in der durch sd:table festgelegten Tabelle.
sd:as-rs
Falls dieses Attribut mit dem Wert 'true' belegt ist, wird der Inhalt des sd:calendar -Elements wie der Inhalt eines sd:rs -Elements ausgegeben.
sd:additional-tables
Ermöglicht das Festlegen zusätzlicher Tabellen, die in der Kalenderabfrage mit ausgewertet werden können.
sd:additional-columns
Ermöglicht das Festlegen zusätzlicher Ausgabespalten, die in der Kalenderabfrage mit ausgewertet werden können.
sd:with-client-search
Benennt eine Spalte (derzeit nur 'thisHour'), die genutzt wird, um nach den zu dieser Ausgabezeile passenden Zeilen der zurückgegebenen Tabelle zu suchen.
sd:minutes-difference
Falls belegt, werden die Zeilen vom Datenbank-Server mit diesem Abstand (15, 30 oder 60 Minuten) zurückgegeben.
sd:remove-when-saved
Falls dieses Attribut mit 'true' belegt und irgendeine Zeile in der Seite gespeichert wird, dann wird das übergeordnete Ergebnis gelöscht und anschließend neu von der Datenbank geladen. Das ist nützlich, falls es Abhängigkeiten zwischen Eingaben und Ausgaben gibt, die sich nicht über andere Möglichkeiten deklarieren lassen.
Fehlt das Attribut und existieren solche Abhängigkeiten, so kann es zu Fehlanzeigen kommen. Das System nutzt - absichtlich - umfangreiche Caching-Techniken, so daß Kalender- und Ausgabetabellen nur neu geladen werden, falls innerhalb der Ausgabeseite ein Grund dafür vorliegt (geändertes Datum, Klick auf den Such-Button).
sd:refresh-explicit
Wenn das Attribut mit 'true' belegt ist, dann wird diese Ausgabe bei jedem Aufruf aktualisiert. Das ist im Allgemeinen nicht sinnvoll, kann aber notwendig sein, falls bsp. Zufallsbilder angezeigt werden sollen.
sd:start-time
Dieses Attribut erhält den Zeitpunkt, ab dem ein Kalender vom Typ 'hour-list' die Zeitpunkte ausgibt. Beispiel:
sd:start-time='08:00'
Es werden die Zeitpunkte ab 08:00 ausgegeben.
sd:end-time
Dieses Attribut enthält den Zeitpunkt, bis zu welchem ein 'hour-list' - Kalender die Zeitpunkte ausgibt:
sd:end-time='20:00'
Html-Attribute erlaubt
Child-Elemente
Beispiele
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!

Die Erläuterungen zum Datenschutz habe ich gelesen und stimme diesen zu.

© 2003-2018 Jürgen Auer, Berlin.