Veröffentlichungsdatum: 21. Juni 2021
Änderungsdatum: 27. Februar 2024
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 entsprechende Seite mit dem Projektpfad beginnend 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 Standard ist dieses Feld noch nicht befüllt, ansonsten belassen Sie bereits hinterlegten Code im Feld und fügen den neuen Code hinten an.
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. Fügen Sie diesen an den entsprechenden Stellen des schon existierenden Codes ein.
Damit beim Abschicken dieser Formularseite keine E-Mail verschickt wird, löschen Sie über den Datei-Quelltext zum Formular alle wd:item Elemente vom type="formular.variable" bis auf das mit fragment name "redirectSuccess" ("Nach dem Absenden aufzurufende URL").
Den Skript-Code aus dem Beispiel können Sie nachfolgend entnehmen.
// Werte aus bereits befüllten Feldern übernehmen
// ANFANG
$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' ];
// ENDE
if(wRequest::getParameter("wFormAction") == "reset"){
$this->reset();
// Werte der gewünschten Formularfelder
// ANFANG
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$values[ 'name' ] = '';
$values[ 'zip' ] = '';
$values[ 'email' ] = '';
wSession::setValue( 'formValues', $values );
// ENDE
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
// ANFANG
$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());
// ENDE
$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.
Fügen Sie diesen an den entsprechenden Stellen des schon existierenden Codes ein.
Damit beim Abschicken dieser Formularseite keine E-Mail verschickt wird, löschen Sie über den Datei-Quelltext zum Formular alle wd:item Elemente vom type="formular.variable" bis auf das mit fragment name "redirectSuccess" ("Nach dem Absenden aufzurufende URL").
Den Skript-Code aus dem Beispiel können Sie nachfolgend entnehmen.
// Werte aus bereits befüllten Feldern übernehmen
// ANFANG
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
wSession::setValue( 'formValues', $values );
$this->elements[ 'age' ]->value = $values[ 'age' ];
//ENDE
if(wRequest::getParameter("wFormAction") == "reset"){
$this->reset();
// Werte der gewünschten Formularfelder
// ANFANG
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$values[ 'age' ] = '';
wSession::setValue( 'formValues', $values );
// ENDE
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
// ANFANG
$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());
// ENDE
$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?status=sent, also die Seite selber). Dau können Sie z.B. einen bedingten Container für HTTP-Parameter einsetzen, über welchen Sie im zutreffenden Fall (z.B. status=sent) einen Hinweis zum erfolgreichen abschicken des Formulares platzieren, andernfalls das Formular anzeigen.
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).
Fügen Sie diesen an den entsprechenden Stellen des schon existierenden Codes ein.
Den Skript-Code aus dem Beispiel können Sie nachfolgend entnehmen.
// Werte aus bereits befüllten Feldern übernehmen
// ANFANG
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
wSession::setValue( 'formValues', $values );
$this->elements[ 'message' ]->value = $values[ 'message' ];
// ENDE
if(wRequest::getParameter("wFormAction") == "reset"){
$this->reset();
// Werte der gewünschten Formularfelder
// ANFANG
$sessionFormValues = wSession::getValue( 'formValues' );
$values = !empty( $sessionFormValues ) && is_array( $sessionFormValues ) === true ? $sessionFormValues : [];
$values[ 'message' ] = '';
wSession::setValue( 'formValues', $values );
// ENDE
wResponse::redirect($this->url);
}
$this->setFormData(wRequest::getParameters());
if($this->validate()){
$mailData = $this->getFormData();
// ...
// ...
// Werte aus anderen Formularen für Formulardaten übernehmen:
// ANFANG
$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');
}
// ENDE
// ...
// ...
//Hier können Sie weitere Funktionen einfügen
// Formular-Werte in Session schreiben
// ANFANG
$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());
// ENDE
$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).