Veröffentlichungsdatum: 21. Juni 2021
Änderungsdatum: 26. April 2023
weblication cms formular session seiten mehrere werte übergeben
Formulare lassen sich auch auf mehrere Seiten aufteilen.
Zur Umsetzung empfehlen wir das Zusatzmodul Formular-Editor, über welches komfortabel über den Struktureditor und die Formularmasken gearbeitet werden kann. Das folgende Beispiel führt eine Umsetzung eines Formulares über drei Seiten an.
Wichtig:
Werden in einer Seite sessionbasierte Inhalte ausgegeben, muss der Seiten-Cache deaktiviert werden.
Legen Sie in einer Seite ein Formular mit den gewünschten Feldern an (z.B. /de/kontakt/formular-seite1.php). Über die erweiterten Formulareinstellungen hinterlegen Sie den Skript-Code, um die im Formular eingegebenen Werte in der Session zu speichern und auszulesen und definieren die Seite, an welche die Formularangaben nach dem Abschicken übergeben werden sollen.
Im Beispiel ist im Feld "Nach dem Absenden aufzurufende URL" die entsprechdende Seite hinterlegt (z.B. /de/kontakt/formular-seite2.php).
Im Skript-Feld "Vor der Erstellung auszuführendes Skript" definieren Sie zu den bestehenden Formularfeldern das Auslesen der bereits befüllten Felder (für ein eventuelles zurück blättern der nachfolgenden Formularseiten).
Im Skript-Feld "Nach dem Absenden auszuführendes Skript" definieren Sie zu den Formularfeldern den Skript-Code zum Speichern der Formularfeld-Werte in die Session.
Den Skript-Code aus dem Beispiel können Sie nachfolgend entnehmen.
// Werte aus bereits befüllten Feldern übernehmen ...
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
wSession::setValue( 'formValues', $values );
$this->elements[ 'name' ]->value = $values[ 'name' ];
$this->elements[ 'zip' ]->value = $values[ 'zip' ];
$this->elements[ 'email' ]->value = $values[ 'email' ];
//...
if(wRequest::getParameter("wFormAction") == "reset"){
$this->reset();
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$values[ 'name' ] = '';
$values[ 'zip' ] = '';
$values[ 'email' ] = '';
wSession::setValue( 'formValues', $values );
wResponse::redirect($this->url);
}
$this->setFormData(wRequest::getParameters());
if($this->validate()){
$mailData = $this->getFormData();
// ...
// ...
//Hier können Sie weitere Funktionen einfügen
// Formular-Werte in Session schreiben
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$values[ 'name' ] = $mailData[ 'name' ];
$values[ 'zip' ] = $mailData[ 'zip' ];
$values[ 'email' ] = $mailData[ 'email' ];
$values[ 'time' ] = time();
wSession::setValue( 'formValues', $values );
// $sessionFormValues = wSession::setValue('formValues',$this->getFormData());
$this->initFormData();
$this->setStatus('sent');
wCache::clearCachePath($this->url);
if(empty($this->getVar('redirectSuccess'))){
$redirectURL = wURL::setParameter($this->url, 'wFormStatus', '');
wOutput::loadWithoutCache($redirectURL);
wResponse::redirect($redirectURL);
}
else{
wResponse::redirect($this->getVar('redirectSuccess'));
}
}
else{
$redirectURL = wURL::setParameter($this->url, 'wFormStatus', 'failed');
wOutput::loadWithoutCache($redirectURL);
wResponse::redirect($redirectURL.'#wFormErrorMessages');
}
In der zweiten Seite legen Sie ebenso ein Formular mit den gewünschten Feldern an (z.B. /de/kontakt/formular-seite2.php). Über die erweiterten Formulareinstellungen hinterlegen Sie den Skript-Code, um die im Formular eingegebenen Werte in der Session zu speichern und auszulesen und definieren die Seite, an welche die Formularangaben nach dem Abschicken übergeben werden sollen.
Im Beispiel ist im Feld "Nach dem Absenden aufzurufende URL" die entsprechdende Seite hinterlegt (z.B. /de/kontakt/formular-seite3.php).
Im Skript-Feld "Vor der Erstellung auszuführendes Skript"
definieren Sie zu den bestehenden Formularfeldern das Auslesen der
bereits befüllten Felder (für ein eventuelles zurück blättern der
nachfolgenden Formularseiten).
Im Skript-Feld "Nach dem Absenden auszuführendes Skript" definieren Sie zu den Formularfeldern den Skript-Code zum Speichern der Formularfeld-Werte in die Session.
Den Skript-Code aus dem Beispiel können Sie nachfolgend entnehmen.
// Werte aus bereits befüllten Feldern übernehmen ...
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
wSession::setValue( 'formValues', $values );
$this->elements[ 'age' ]->value = $values[ 'age' ];
//...
if(wRequest::getParameter("wFormAction") == "reset"){
$this->reset();
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$values[ 'age' ] = '';
wSession::setValue( 'formValues', $values );
wResponse::redirect($this->url);
}
$this->setFormData(wRequest::getParameters());
if($this->validate()){
$mailData = $this->getFormData();
// ...
// ...
//Hier können Sie weitere Funktionen einfügen
// Formular-Werte in Session schreiben
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$values[ 'age' ] = $mailData[ 'age' ];
wSession::setValue( 'formValues', $values );
//$sessionFormValues .= wSession::setValue('formValues',$this->getFormData());
$this->initFormData();
$this->setStatus('sent');
wCache::clearCachePath($this->url);
if(empty($this->getVar('redirectSuccess'))){
$redirectURL = wURL::setParameter($this->url, 'wFormStatus', '');
wOutput::loadWithoutCache($redirectURL);
wResponse::redirect($redirectURL);
}
else{
wResponse::redirect($this->getVar('redirectSuccess'));
}
}
else{
$redirectURL = wURL::setParameter($this->url, 'wFormStatus', 'failed');
wOutput::loadWithoutCache($redirectURL);
wResponse::redirect($redirectURL.'#wFormErrorMessages');
}
Legen Sie abschliessend in einer Seite ein Formular mit den gewünschten Feldern (z.B. ein Mitteilungsfeld) an (z.B. /de/kontakt/formular-seite3.php). Über die erweiterten Formulareinstellungen hinterlegen Sie den Skript-Code, um die im Formular eingegebenen Werte in der Session zu speichern und auszulesen und definieren die Seite, an welche die Formularangaben nach dem Abschicken übergeben werden sollen.
Im Beispiel ist im Feld "Nach dem Absenden aufzurufende URL" die entsprechdende Seite hinterlegt (z.B. /de/kontakt/formular-seite3.php, also die Seite selber). Alternativ können Sie auch eine separate Danke-Seite angeben.
Im Skript-Feld "Vor der Erstellung auszuführendes Skript" definieren Sie zu den bestehenden Formularfeldern das Auslesen der bereits befüllten Felder (für ein eventuelles zurück blättern der nachfolgenden Formularseiten).
// Werte aus bereits befüllten Feldern übernehmen ...
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
wSession::setValue( 'formValues', $values );
$this->elements[ 'message' ]->value = $values[ 'message' ];
//...
if(wRequest::getParameter("wFormAction") == "reset"){
$this->reset();
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$values[ 'message' ] = '';
wSession::setValue( 'formValues', $values );
wResponse::redirect($this->url);
}
$this->setFormData(wRequest::getParameters());
if($this->validate()){
$mailData = $this->getFormData();
// ...
// ...
// Werte aus anderen Formularen für Formulardaten übernehmen:
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$mailData[ 'name' ] = $values[ 'name' ];
$mailData[ 'zip' ] = $values[ 'zip' ];
$mailData[ 'email' ] = $values[ 'email' ];
$mailData[ 'age' ] = $values[ 'age' ];
if(empty($mailData[ 'name' ])){
wResponse::redirect('/de/kontakt/formular-seite1.php');
}
// ...
// ...
//Hier können Sie weitere Funktionen einfügen
// Formular-Werte in Session schreiben
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$values[ 'message' ] = $mailData[ 'message' ];
wSession::setValue( 'formValues', $values );
//$sessionFormValues .= wSession::setValue('formValues',$this->getFormData());
$this->initFormData();
$this->setStatus('sent');
wCache::clearCachePath($this->url);
if(empty($this->getVar('redirectSuccess'))){
$redirectURL = wURL::setParameter($this->url, 'wFormStatus', '');
wSession::setValue( 'formValues', NULL);
wOutput::loadWithoutCache($redirectURL);
wResponse::redirect($redirectURL);
}
else{
wSession::setValue( 'formValues', NULL);
wResponse::redirect($this->getVar('redirectSuccess'));
}
}
else{
$redirectURL = wURL::setParameter($this->url, 'wFormStatus', 'failed');
wOutput::loadWithoutCache($redirectURL);
wResponse::redirect($redirectURL.'#wFormErrorMessages');
}
Das genannte Beispiel zeigt Ihnen eine Möglichkeit auf, welche Sie an Ihre individuellen Vorstellungen anpassen können.
Tipp:
Sie können ein Formular auch innerhalb einer Seite auf mehrere "Bereiche" aufteilen (z.B. aufgeteilt über einen Registerlaschen-Container).