Formularwerte initialisieren, bzw. dynamisch setzen
Veröffentlichungsdatum: 19. Juli 2016
Änderungsdatum: 07. April 2025
initialisieren formulare formulardaten formularfelder userdaten benutzerdaten dynamisch formularwerte setzen vorbelegen
Dieser Artikel beschreibt, wie Sie dynamisch Werte - wie z.B. Benutzerdaten - an ein Formular übergeben.
Der Formulareditor ermöglicht es Ihnen, einem Formular beim Aufruf bereits Werte mitzugeben. So können Sie im Formular z.B. die Daten des aktuell eingeloggten Benutzers initialisieren / vorbelegen.
Öffnen Sie hierzu das entsprechende Formular zur Bearbeitung und Klicken Sie auf den Button "Erweiterte Formulareinstellungen einblenden" (siehe nachfolgender Screenshot).
Beachten Sie, dass diese Funktion nur mit dem Formulareditor nutzbar ist! Alternativ bleibt die Möglichkeit, die Einträge manuell im Quelltext der Formularseite unter "serverEventOnBeforeBuild" vorzunehmen.
Über die erweiterten Formulareinstellungen setzen Sie die gewünschten Werte im Eingabefeld "Vor der Erstellung auszuführendes Skript".
Im nachfolgenden Beispiel werden folgende Werte für Formularfelder gesetzt:
- Wert des Elementes "site" wird auf aktuelle Seite gesetzt
- Wert des Elementes "customertype" wird als Requestparameter gesetzt, also aus der URL gezogen
- Diverse Benutzerdaten (Vorname, Nachname, Kundennummer, etc.) werden in den jeweiligen Formularefeldern gesetzt.
Das Beispiel aus dem oberen Screenshot finden Sie nachfolgend nochmals als Quelltextbeispiel. Achten Sie darauf, dass im Feld "Vor der Erstellung auszuführendes Skript" keine PHP-Tags um den PHP-Code gesetzt werden dürfen!
Beispiel: Auszug aus den erweiterten Formulareinstellungen des Formulareditors
$this->elements['site']->value = $_SERVER['PHP_SELF'];
$this->elements['customertype']->value = wRequest::getParameterSecure('customertype');
$this->elements['customernumber']->value = wUserData::getMeta('customerID');
$this->elements['company']->value = wUserData::getData('/wUser/company[@class="business"]/@value');
if(wUserData::getData('title') == "mr"){
$this->elements['title']->value = "Herr";
}
elseif(wUserData::getData('title') == "ms"){
$this->elements['title']->value = "Frau";
}
$this->elements['firstname']->value = wUserData::getData('firstname');
$this->elements['lastname']->value = wUserData::getData('lastname');
$this->elements['phone']->value = wUserData::getData('/wUser/phone[@class="business"]/@value');
$this->elements['email']->value = wUserData::getData('email');Weitere Beispiele
Beispiel: Initialisieren der Eingabefelder select, radio, checkbox, wenn für diese noch keine Auswahlmöglichkeiten (options) festgelegt wurden.
/*Eingabefelder können über value nur dann richtig initalisiert werden, wenn die passenden Auswahlmöglichkeiten
für das Eingabefeld eingetragen wurden.
Ist das nicht der Fall, müssen diese über $this->elements['x']->addOptions (wForm::addOption) ergänzt werden.
*/
$tmp[] = 'Auswahl 1';
$tmp[] = 'Auswahl 3';
for($i = 0; $i < count($tmp); $i++){
$checked = false;
if($valueSelected == $tmp[$i]) $checked = true;
$this->elements['mySelectBox']->addOption($tmp[$i], $tmp[$i], $checked, '');
}
Beispiel: Initialisieren von Eingabefeldern-Feldern, wenn diese als Option definiert wurden
/* Hier entsprechen die 'values' der 'caption' in den Auswahlmöglichkeiten des Feldes
Beispiel für die Konfiguration des Eingabefeldes, Auswahlmöglichkeit:
Auswahl 1
Auswahl 2
Auswahl 3
*/
$tmp[] = 'Auswahl 1';
$tmp[] = 'Auswahl 3';
$this->elements['myMultiSelect']->value = $tmp;
Beispiel: Initialisieren von Kategorien
/* Bei Kategorien entsprechen die 'values' in der Regel nicht der 'caption'
In der Regel werden die Auswahlmöglichkeiten für die Kategorien, durch das System automatisch wie folgt gesetzt:
AF|Afrika
GB|Groß-Britannien
*/
$tmpCat[] = 'AF';
$tmpCat[] = 'GB';
$this->elements['multicat']->value = $tmpCat;Beispiel: Initialisieren eines Datumfeldes
/*
Der Value muss das für das Datumsfeld definierte Format haben: D, dd.mm.yyyy
Platzhalter, wie today oder today-30 funktionieren hier nicht, da keine XSLT-Transformation stattfindet
*/
//Initalisieren des Values
$this->elements['date']->value = 'Do, 10.02.2022';
//Einschränken der Datumsauswahl
//Frühestes Datum
$this->elements['date']->attributes['data-datemin'] = '2022-01-31';
//Spätestes Datum
$this->elements['date']->attributes['data-datemax'] = '2022-02-10';Weiterführende Links
FAQs
- Wie kann ich einem Formular beim Aufruf dynamische Werte übergeben (z. B. Benutzerdaten)?
- Mit dem **Formulareditor** können Sie einem Formular beim Aufruf bereits Werte mitgeben. Dadurch können Sie im Formular Felder z. B. mit Daten des aktuell eingeloggten Benutzers **vorbelegen/initialisieren**.
- Welche Voraussetzung muss erfüllt sein, um die erweiterten Formulareinstellungen zu nutzen?
- Die Funktion ist **nur mit dem Formulareditor** nutzbar. Alternativ können Sie die Einträge manuell im Quelltext der Formularseite unter **<code class="codeInline">serverEventOnBeforeBuild</code>** vornehmen.
- Wo finde ich im Formulareditor die Option, um Werte dynamisch zu setzen?
- Öffnen Sie das betreffende Formular zur Bearbeitung und klicken Sie auf **„Erweiterte Formulareinstellungen einblenden“**. Dort können Sie die gewünschten Werte im Eingabefeld **„Vor der Erstellung auszuführendes Skript“** festlegen.
- Was ist beim Feld „Vor der Erstellung auszuführendes Skript“ besonders zu beachten?
- Wichtig: Im Feld **„Vor der Erstellung auszuführendes Skript“** dürfen **keine PHP-Tags** um den PHP-Code gesetzt werden. Es wird nur der PHP-Code selbst erwartet.
- Wie setze ich im Formulareditor z. B. den Wert eines Formularfeldes auf die aktuelle Seite?
- Sie können das Feld „site“ im Skript mit dem aktuellen Serverpfad vorbelegen, z. B.: <code class="codeInline">$this->elements['site']->value = $_SERVER['PHP_SELF'];</code>
- Wie kann ich einen Formularwert aus einem Requestparameter befüllen?
- Wenn Sie z. B. einen Requestparameter nutzen möchten, können Sie ihn im Skript setzen, z. B.: <code class="codeInline">$this->elements['customertype']->value = wRequest::getParameterSecure('customertype');</code>
- Wie setze ich Benutzerdaten in Formularfelder (Vorname, Nachname, Kundennummer, etc.)?
- Mit den gezeigten Beispielen können Sie Werte aus <code class="codeInline">wUserData</code> in die jeweiligen Formularelemente schreiben, z. B.: - Kundennummer: <code class="codeInline">$this->elements['customernumber']->value = wUserData::getMeta('customerID');</code> - Vorname: <code class="codeInline">$this->elements['firstname']->value = wUserData::getData('firstname');</code> - Nachname: <code class="codeInline">$this->elements['lastname']->value = wUserData::getData('lastname');</code>
- Wie kann ich einen geschlechtsabhängigen Wert (z. B. „Herr“/„Frau“) setzen?
- Sie können abhängig vom Benutzerwert bedingte Logik verwenden, z. B.: - Wenn <code class="codeInline">title</code> „mr“ ist: <code class="codeInline">Herr</code> - Wenn <code class="codeInline">title</code> „ms“ ist: <code class="codeInline">Frau</code> Beispiel: <code class="codeInline">if(wUserData::getData('title') == "mr"){ $this->elements['title']->value = "Herr"; } elseif(wUserData::getData('title') == "ms"){ $this->elements['title']->value = "Frau"; }</code>
- Warum werden select/radio/checkbox-Felder manchmal nicht korrekt initialisiert, wenn ich nur <code class="codeInline">value</code> setze?
- Wenn für select/radio/checkbox noch **keine passenden Auswahlmöglichkeiten (options)** im Formular definiert sind, kann <code class="codeInline">value</code> nicht korrekt funktionieren. Dann müssen die Optionen zuerst ergänzt werden, z. B. über <code class="codeInline">addOptions</code> bzw. <code class="codeInline">wForm::addOption</code>.
- Wie kann ich Optionen (options) für ein Select/Feld ergänzen und dabei einen Wert als „checked“ markieren?
- Im Beispiel wird eine Liste an Auswahlwerten erstellt und pro Option geprüft, ob sie dem gewünschten <code class="codeInline">valueSelected</code> entspricht. Dann wird die Option mit <code class="codeInline">addOption</code> inkl. <code class="codeInline">checked</code> gesetzt. Grundidee aus dem Beispiel: - Optionen in ein Array schreiben - Für jede Option <code class="codeInline">checked</code> anhand von <code class="codeInline">valueSelected</code> setzen - Mit <code class="codeInline">$this->elements['mySelectBox']->addOption(...)</code> hinzufügen.
- Wie initialisiere ich ein Multiselect-Feld, wenn dessen Optionen bereits definiert sind?
- Wenn das Feld als Option definiert ist, können Sie die Werte direkt über <code class="codeInline">value</code> setzen. Im Beispiel wird ein Array an Werten (z. B. <code class="codeInline">['Auswahl 1','Auswahl 3']</code>) dem Multiselect zugewiesen: <code class="codeInline">$this->elements['myMultiSelect']->value = $tmp;</code>
- Wie unterscheidet sich das Setzen von Kategorien bei <code class="codeInline">value</code> gegenüber dem Caption-Text?
- Bei Kategorien entsprechen die <code class="codeInline">values</code> in der Regel **nicht** der sichtbaren Caption. Das System setzt die Auswahl typischerweise automatisch, z. B.: - <code class="codeInline">AF|Afrika</code> - <code class="codeInline">GB|Groß-Britannien</code> Daher werden im Code meist die Kategorie-IDs/Values gesetzt (z. B. <code class="codeInline">AF</code>, <code class="codeInline">GB</code>) statt der Captions.
- Wie initialisiere ich ein Kategorienfeld im Beispiel?
- Im Beispiel werden Kategorie-Values gesammelt und dem Element zugewiesen: <code class="codeInline">$tmpCat[] = 'AF';</code> <code class="codeInline">$tmpCat[] = 'GB';</code> <code class="codeInline">$this->elements['multicat']->value = $tmpCat;</code>
- In welchem Format muss ein Datumfeld-Value gesetzt werden?
- Der <code class="codeInline">value</code> muss dem für das Datumsfeld definierten Format entsprechen: **<code class="codeInline">D, dd.mm.yyyy</code>** (z. B. „Do, 10.02.2022“). Platzhalter wie <code class="codeInline">today</code> oder <code class="codeInline">today-30</code> funktionieren hier laut Hinweis **nicht**, da keine XSLT-Transformation stattfindet.
- Wie initialisiere ich ein Datumfeld mit einem Startwert?
- Beispielhaft wird der Value so gesetzt: <code class="codeInline">$this->elements['date']->value = 'Do, 10.02.2022';</code>
- Wie schränke ich die Datumauswahl ein (Minimum/Maximum)?
- Sie können die Auswahl über Attribute begrenzen: - Frühestes Datum: <code class="codeInline">$this->elements['date']->attributes['data-datemin'] = '2022-01-31';</code> - Spätestes Datum: <code class="codeInline">$this->elements['date']->attributes['data-datemax'] = '2022-02-10';</code>