Der Eintrag 'wrapper' kann
Bestandteil der Bereiche 'neues_tupel', 'anzeige' und 'loeschen'
sein. Wird über die Aktion 'neues_tupel' ein neues Datentupel erzeugt,
so wird es standardmäßig in die Leittabelle eingefügt. Manchmal ist
es aber notwendig, dass gleichzeitig Einfügungen in andere Relationen
vorgenommen werden, um beispielsweise referentielle Integritäten zu
erfüllen. Zu diesem Zweck steht das Array 'wrapper' (hier Bestandteil
von 'neues_tupel') zur Verfügung, das nach den Namen der Relationen
indiziert ist, in die Einfügungen vorgenommen werden sollen. Der zugehörige
Wert ist wiederum ein Array, das nun nach den Attributnamen der Relation
indiziert ist. Der den Attributen zugeordnete Wert kann ein Platzhalter
sein, der sich auf ein Feld des neues_tupel-Formulars bezieht und
über 'values' (siehe Abschnitt )
definiert ist. Als Platzhalter sollte die Version mit den runden Klammern
('$(...)') verwendet werden, damit keine Konvertierungen durchgeführt
werden (siehe Abschnitt ). An Stelle der Platzhalter können auch SQL-Anfragen,
in der Form wie sie bereits in 'values' Verwendung gefunden haben
(als String mit führendem 'SQL:'), eingesetzt werden. Durch 'wrapper'
ist auf diese Weise also festgelegt, welche Werte aus dem neues_tupel-Formular,
welchen Attributen in welchen Relationen zugeordnet werden müssen.
Werden im Formular auch Felder verwendet, die keine Entsprechung in
der Leittabelle haben, so muss auch für die Leittabelle ein wrapper
angegeben werden.
Neben der Aktion 'neues_tupel' wird 'wrapper' auch bei den Aktionen 'hinzufuegen(_multi)' und 'verschieben(_multi)' (hier Bestandteil von 'anzeige') benötigt. Hier muss 'wrapper' definiert sein, damit die Anwendung weiß, in welche Relationen die Einfügungen vorgenommen werden sollen. Im Gegensatz zu 'neues_tupel' beziehen sich die Platzhalter hier auch auf die Ergebnismenge des Query.
Im Zusammenhang mit der Aktion 'loeschen' kann 'wrapper' (hier Bestandteil von 'loeschen') verwendet werden, um gleichzeitig Löschungen in weiteren Relationen als der Leittabelle durchzuführen. Das Format ist identisch zu oben. Dabei sind nur Attribute zu spezifizieren, mit denen der zu löschenden Eintrag in der Relation eindeutig identifiziert werden kann. Die Platzhalter beziehen sich auch hier auf die Ergebnisse des Query. Das Löschen in der Leittabelle wird in der Regel nach den Primärschlüsseln vorgenommen. Soll nach anderen Attributen in der Leittabelle gelöscht werden, kann dies ebenfalls durch einen entsprechenden Wrapper-Eintrag vorgenommen werden.
Das folgende Beispiel erzeugt in der HTML-Ausgabe zwei Tabellen. Die obere stellt die für Vorlesungen reservierten Räume dar, die untere zeigt alle Räume. Aus der unteren können durch Anklicken Räume zur Relation 'vorlesung_findet_statt_in' hinzugefügt werden, die dann auch in der oberen Tabelle angezeigt werden. Der Wrapper ordnet das Feld 'raumnummer' dem Attribut 'raumnummer' der Relation 'vorlesung_findet_statt_in' zu. Darüber werden noch einige feste Werte vorgegeben (wichtig ist die richtige Vorlesungsnummer).
tabellenid => "vorlesungsräume",
leittabelle => "vorlesung_findet_statt_in",
anzeige => array (
query=>array(
array(
SELECT=>"raum.name as raum, raum.sitzplaetze,
raum.ausstattung, vr.*",
FROM=>"vorlesung_findet_statt_in vr, raum",
WHERE=>"vr.raumnummer=raum.raumnummer",
),
),
),
);
$modul_param2 = array (
tabellenid => "räume",
leittabelle => "raum",
anzeige => array(
aktionen=>array(hinzufuegen=>1),
wrapper=>array(
vorlesung_findet_statt_in=>array(
raumnummer=>'$(raumnummer)',
wochentag=>'1',
zeit=>wftime_unix2sql(time(), "time"),
minutendauer=>'120',
vorlesungnummer=>'10',
),
),
),
);
modul_tabelle_list($modul_param1, $modul_param2);