wForm::addElement

Fügt dem Formular ein Eingabefeld bzw. Element hinzu

Funktionsaufruf

Boolean addElement(String type, String name = null, label = null, options = array())

Parameter

type
Typ des Elementes
name
Name des Elementes
label
Bezeichnung
options
Eigenschaften
Formulareditor

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();

?>
PHP

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));

?>

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.

 
FAQs
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>).