wForm::addElement
Fügt dem Formular ein Eingabefeld bzw. Element hinzu
Funktionsaufruf
Parameter
- type
- Typ des Elementes
- name
- Name des Elementes
- label
- Bezeichnung
- options
- Eigenschaften
Die aufgeführten Beispiele werden im Formulareditor über das Feld "Vor Erstellung auszuführendes Script" eingesetzt. Da das Script innerhalb eines Formularobjektes ausgeführt wird sprechen Sie es mit $this an.
Auf die Eingabeelemente des Formulars greifen Sie mit $this->elements['elementname'] zu. Die Funktion muss nur eingesetzt werden, falls das Feld nicht über die Maske eingefügt wurde bzw. werden soll.
Möchten Sie Felder die bereits enthalten sind vorbelegen lesen Sie mehr unter: Formularwerte dynamisch setzen
Beispiel: Beispiel 1: Hinzufügen eines Elementes
Quelltext
<?php
/*Attribute festlegen*/
$attributes = array();
$attributes['class'] = 'L myClass';
$attributes['labelClass'] = 'textContent';
/*Validatoren festlegen*/
$validators = array();
$validators[]['type'] = 'required';
$validators[]['errorMessage'] = 'Bitte geben Sie einen Namen an';
/*Hinzufügen des Eingabefeldes*/
$this->addElement('input', 'name', 'Name*', array('attributes' => $attributes, 'validators' => $validators));
/*Initalisieren des Eingabefeldes*/
$this->elements['name']->value = wRequest::getParameterSecure('name');
/*Ausgabe des Feldes*/
$this->elements['name']->renderRow();
?>Beispiel: Beispiel 2: Hinzufügen eines Elementes zu einem Formular (Datumsfeld)
Quelltext
<?php
/*Attribute festlegen*/
$attributes = array();
$attributes['class'] = 'date';
$attributes['labelClass'] = 'dateClass';
$attributes['readonly'] = 'readonly';
$attributes['data-datemin'] = 'today';
$attributes['data-dateformat'] = 'D, dd.mm.yy';
/*Validatoren festlegen*/
$validators = array();
$validators[]['type'] = 'pregMatchOrEmpty("(\w+), (0[0-9]|1[0-9]|2[0-9]|3[0-1])\.(0[0-9]|1[0-2])\.[1-2]\d\d\d")';
$validators[]['errorMessage'] = 'Bitte füllen Sie das Feld Von-Datum aus.';
$this->addElement('input', 'dateFrom', 'Von Datum*', array('attributes' => $attributes, 'validators' => $validators));
/*Ausgabe des Feldes*/
$this->elements['dateFrom']->renderRow();
?>Bedenken Sie, daß beim manuellen Einbinden von Formularen auch die erforderlichen JavaScript-Dateien eingebunden werden müssen. Welche dies sind, entnehmen Sie am besten dem Quelltext einer Formularseite einer aktuellen Projektumgebung.
Beispiel: Beispiel 1: Hinzufügen eines Elementes zu einem Formular
Quelltext
<?php
$formular = new wForm();
$formular->addElement('input', 'name', 'Name*', array('attributes' => array('class' => 'L'), 'validators' => array(array('type' => 'required', 'errorMessage' => 'Bitte geben Sie einen Namen an'))));
//...
?>Beispiel: Beispiel 2: Hinzufügen eines Elementes zu einem Formular (zusätzlich mit labelClass, ab CMS Version 007.001.180.000)
Quelltext
<?php
$formular = new wForm();
$formular->addElement('input', 'name', 'Name*', array('attributes' => array('class' => 'L', 'labelClass' => 'textClass'), 'validators' => array(array('type' => 'required', 'errorMessage' => 'Bitte geben Sie einen Namen an'))));
//...
?>Beispiel: Beispiel 3: Hinzufügen eines Elementes zu einem Formular (zusätzlich mit eigener Klasse, ab CMS Version 012.004.018.000)
Quelltext
<?php
$formular = new wForm();
$formular->addElement('input', 'xxx', 'Name*', array('attributes' => array('class' => 'L myClass', 'labelClass' => 'textClass'), 'validators' => array(array('type' => 'required', 'errorMessage' => 'Bitte geben Sie einen Namen an'))));
//...
?>Beispiel: Beispiel 4: Hinzufügen eines Elementes zu einem Formular (Datumsfeld)
Quelltext
<?php
$formular = new wForm();
$formular->addElement('input', 'dateFrom', 'Von Datum*', array(
'attributes' => array('class' => 'date', 'labelClass' => 'dateClass','readonly' => 'readonly','data-datemin' => 'today','data-dateformat' => 'D, dd.mm.yy'),
'validators' => array(array('type' => 'pregMatchOrEmpty("(\w+), (0[0-9]|1[0-9]|2[0-9]|3[0-1])\.(0[0-9]|1[0-2])\.[1-2]\d\d\d")', 'errorMessage' => 'Bitte füllen Sie das Feld Von-Datum aus.'))));
?>Beispiel: Beispiel 5: Hinzufügen eines Selectfeldes + Validierung auf required
Quelltext
<?php
$formular = new wForm();
$value = '';
$attributes = array();
$attributes['class'] = 'L';
$options = array();
$options[''] = ''; /*Soll das Selectfeld auf required geprüft werden, dann muss der value '' sein*/
$options['recommendation'] = 'Empfehlung';
$options['www'] = 'Internet';
$options['socialmedia'] = 'Social Media';
$validators = array(array('type' => 'required', 'errorMessage' => 'Bitte geben Sie einen Wert ein'));
$formular->addElement('select', 'found', 'Wie haben Sie von uns erfahren?', array( 'attributes' => $attributes, 'options' => $options, 'validators' => $validators));
?>Weiterführende Links
Hinweis
Beim Einsatz von Framework-Funktionen in eigenen Skripten beachten Sie bitte den Artikel "So verwenden Sie das PHP-Framework in eigenen Scripten".
Wenn Sie eine Funktion innerhalb einer Weblication® Seite z.B. über das PHP-Quelltext Element oder in einem XSL-Template über wsl:php einbinden, muss das Framework über die grid.php nicht mehr referenziert werden.
- Was macht wForm::addElement?
- <code class="codeInline">wForm::addElement</code> fügt einem Formular ein Eingabefeld bzw. Element hinzu. Dafür wird der Elementtyp sowie eine eindeutige Bezeichnung (Name) übergeben.
- Wie lautet die Funktionssignatur von wForm::addElement?
- <code class="codeInline">Boolean addElement(String type, String name = null, label = null, options = array())</code>
- Wofür sind die Parameter type, name, label und options gedacht?
- - **type**: Typ des Elements (z. B. <code class="codeInline">input</code>, <code class="codeInline">select</code>). - **name**: Name des Elements. - **label**: Beschriftung des Feldes. - **options**: Eigenschaften/Konfiguration des Elements (z. B. <code class="codeInline">attributes</code>, <code class="codeInline">validators</code>, <code class="codeInline">options</code> für Selects).
- Wie werden Attribute und Validatoren für ein Eingabefeld konfiguriert?
- Über <code class="codeInline">options</code> als Array: z. B. <code class="codeInline">options => ['attributes' => ..., 'validators' => ...]</code>. In den Beispielen werden Attribute (CSS-Klassen, labelClass usw.) unter <code class="codeInline">attributes</code> gesetzt und Validierungen unter <code class="codeInline">validators</code>, inkl. <code class="codeInline">type</code> und <code class="codeInline">errorMessage</code>.
- Wie kann ein Feld mit einem Wert vorbelegt werden?
- Nachdem das Element hinzugefügt wurde, kann der Wert gesetzt werden, indem Sie auf <code class="codeInline">$this->elements['elementname']</code> zugreifen und dessen <code class="codeInline">value</code> setzen (z. B. <code class="codeInline">...->value = wRequest::getParameterSecure('name');</code>).
- Wie greife ich auf Elemente des Formulars zu?
- Auf die Eingabeelemente greifen Sie mit <code class="codeInline">$this->elements['elementname']</code> zu (z. B. um den <code class="codeInline">value</code> zu setzen oder das Rendering auszulösen).
- Wann sollte wForm::addElement überhaupt verwendet werden?
- Die Funktion soll nur eingesetzt werden, falls das Feld **nicht** über die Maske eingefügt wurde bzw. werden soll.
- Wie wird ein <code class="codeInline">input</code>-Feld mit required-Validierung hinzugefügt?
- Beispielhaft wird unter <code class="codeInline">validators</code> ein Eintrag gesetzt, z. B. <code class="codeInline">['type' => 'required', 'errorMessage' => '...']</code>, und dann wird das Element mit <code class="codeInline">addElement('input', 'name', 'Name*', [...])</code> erstellt.
- Wie kann man beim Datumsfeld zusätzliche HTML-Attribute setzen?
- Im Beispiel werden <code class="codeInline">attributes</code> wie <code class="codeInline">class</code>, <code class="codeInline">labelClass</code>, <code class="codeInline">readonly</code>, sowie Data-Attribute wie <code class="codeInline">data-datemin</code> und <code class="codeInline">data-dateformat</code> gesetzt und anschließend Validierung über ein <code class="codeInline">pregMatchOrEmpty(...)</code> hinzugefügt.
- Wie wird ein Datumsfeld mit Regex-Validierung angelegt?
- Über <code class="codeInline">validators</code> mit <code class="codeInline">type</code> wie <code class="codeInline">pregMatchOrEmpty("(\w+), (0[0-9]|1[0-9]|2[0-9]|3[0-1])\.(0[0-9]|1[0-2])\.[1-2]\d\d\d")</code> und einer passenden <code class="codeInline">errorMessage</code> im <code class="codeInline">options</code>-Array beim Aufruf von <code class="codeInline">addElement('input', 'dateFrom', ...)</code>.
- Wie fügt man ein Selectfeld hinzu und konfiguriert Optionen?
- Mit <code class="codeInline">addElement('select', 'found', '...', ['attributes' => ..., 'options' => $options, 'validators' => ...])</code>. In den Beispielen werden die Select-Optionen in einem Array <code class="codeInline">$options</code> gesetzt (z. B. <code class="codeInline">'' => ''</code>, <code class="codeInline">recommendation => 'Empfehlung'</code>, usw.).
- Wie wird im Selectfeld sichergestellt, dass required geprüft wird?
- Damit das Selectfeld auf <code class="codeInline">required</code> prüft, muss der Wert für „keine Auswahl“ dem leeren Wert entsprechen. Im Beispiel wird dafür <code class="codeInline">options[''] = ''</code> gesetzt und ein Validator <code class="codeInline">['type' => 'required', 'errorMessage' => '...']</code> verwendet. Das <code class="codeInline">''</code> muss dabei der initiale/ungültige Wert sein.
- Wie erfolgt die Ausgabe eines hinzugefügten Formular-Elements?
- Nachdem das Element hinzugefügt und (optional) der <code class="codeInline">value</code> gesetzt wurde, wird es mit <code class="codeInline">$this->elements['elementname']->renderRow();</code> ausgegeben.
- Müssen beim manuellen Einbinden von Formularen zusätzliche Dateien eingebunden werden?
- Ja. Beim manuellen Einbinden von Formularen müssen die erforderlichen JavaScript-Dateien eingebunden werden. Welche das sind, soll dem Quelltext einer Formularseite in einer aktuellen Projektumgebung entnommen werden.
- Wie verwendet man Framework-Funktionen in eigenen Skripten innerhalb einer Weblication® Seite?
- Beim Einsatz von Framework-Funktionen in eigenen Skripten beachten Sie den jeweiligen Hinweisartikel. Falls eine Funktion innerhalb einer Weblication®-Seite über das PHP-Quelltext Element oder in einem XSL-Template über <code class="codeInline">wsl:php</code> eingebunden wird, muss das Framework über <code class="codeInline">grid.php</code> nicht mehr referenziert werden.
- Wie läuft ein Script im Formulareditor ab und wie sollte es adressiert werden?
- Die aufgeführten Beispiele werden im Formulareditor über das Feld „Vor Erstellung auszuführendes Script“ eingesetzt. Da das Script innerhalb eines Formularobjektes ausgeführt wird, soll es mit <code class="codeInline">$this</code> angesprochen werden (z. B. <code class="codeInline">$this->addElement(...)</code>).