Formulareditor: Eingabefelder dynamisch einfügen

Sie können im Formulareditor über das Feld "Vor der Erstellung auszuführendes Skript" Eingabefelder dynamisch ergänzen oder abhängig von bestimmten Bedingungen zu initialisieren.

Die hier beschriebenen Beispiele sind stark vereinfachte Auszüge u.a. aus dem Anmeldeformular des Kurse-Weblics® [IHR-INHALTS-PROJEKT]/kurse/anmeldung.php).

Auswahlfeld (select) dynamisch füllen (addOption)

In dem Formular wurde ein Auswahlfeld Kurse eingefügt, das den Namen 'courses' hat.

Das select-Feld soll alle Kurse sowie deren Titel enthalten. In dem Feld "Vor der Erstellung auszuführendes Skript" werden über die Framework-Klasse wList alle Kurse ausgelesen.

Der Kurstitel und die Kurs-Id werden über dem Auswalfeld über wForm::addOption hinzugefügt.

Auszug aus dem Anmeldeformular des Kurse-Weblics (stark vereinfacht)
Auszug aus dem Anmeldeformular des Kurse-Weblics (stark vereinfacht)

Auslesen der Kursdaten und setzen der Optionen des select-Feldes courses über die Funktion wElement::addOption()

$path = wRequest::getParameter('course'); /*Kurspfad*/

/*Es wurde kein Pfad angegeben*/
if($path == ''){

/*Auslesen der Kurse über wList*/
$listParameters['dir'] = wPathName::getDirFile(wPageCur::getPath()).'/daten';
$courses = wList::createListArray($listParameters);

/*Setzen der ersten leeren Option*/
$this->elements['courses']->addOption('', wTexts::getText('no_course_selected'));

/*Setzen der Optionen des select-Feldes über addOption*/
foreach($courses as $course){
$title = wDocumentData::getData($course, 'title');
$this->elements['courses']->addOption($course, $title);
}

}

Verstecktes Eingabefeld (input) dynamisch hinzufügen (addElement)

Bei der Anmeldung soll ein hidden-Feld mit dem Kurspfad übergeben werden. 

Das Feld wurde nicht über den Formulareditor eingefügt,  sondern dynamisch über wForm::addElement erstellt. Damit es in dem Formular ausgegeben wird, muss es zusätzlich über die Funktion wElement::renderRow ausgegeben werden. 


Beispiel: Hinzufügen eines versteckten Eingabefeldes

$path = wRequest::getParameter('course'); /*Kurspfad*/

/*Hinzufügen des Eingabefeldes*/
$this->addElement('hidden', 'coursePath', 'Kurspfad');

/*Setzen des Wertes*/
$this->elements['coursePath']->value = $path;

/*Ausgeben im Formular*/
print $this->elements['coursePath']->renderRow();

Eingabefeld (input) mit Wert initialisieren

In dem Formular ist ein Feld (course-id) enthalten, das abhängig vom ausgewählten Kurspfad die KursId (id) auslesen soll. 

Sie können den Wert eines Formular-Elementes über $this->elements['elementname']>value setzen

Beispiel: Initalisieren eines Eingabefeldes (wElement->value)

$path = wRequest::getParameter('course'); /*Kurspfad*/

/*Auslesen der Kurs-Daten*/
$dataObject = wDocumentData::getDataObjectAsArray($path, true);

/*Setzen des Kurs-Values*/
$this->elements['course-id']->value = $dataObject['id'];

Attribute für Eingabefelder setzen

Die Eingabefelder sollen dynamisch mit Platzhaltern aus den globalen Texten versehen werden.

Der Platzhalter ist ein Attribut, das dem Eingabefeld im HTML-Quelltext zugewiesen wird. Attribute können über $this->elements['elementName']->attributes['attribute'] gesetzt werden.

Beispiel: Setzen von Attributen

/*Auslesen des Textes*/
$text = wTexts::getText('placeholder_message');

/*Setzen des Kurs-Values*/
$this->elements['message']->attributes['placeholder'] = $text;