Hallo Stranger,
Wieso klaut der die POST-Werte einfach?
TYPOlight löscht die übermittelten Werte aus dem $_POST, wenn das Formular gepostet wurde (und das Feld erfoglreich 'validiert' wurde, also keine Fehler aufgetreten sind). Der Wert wird dann in der Session gespeichert.
Aus diesem Grund solltest Du in der Regel
PHP-Code:
$this->Input->post('FELDNAME')
anstelle von
PHP-Code:
$_POST['FELDNAME']
verwenden.
Idee:
Mir ist bewusst, dass das System sowas nicht ermöglicht, deshalb habe ich mir überlegt im Template zu überprüfen, ob das Formular abgeschickt wurde.
Dabei ist also jumpTo übrigens auf "0", dieselbe Seite lädt also erneut nach dem Abschicken.
Wie kann ich jetzt bei der POST-Übertragung ermitteln, ob das Formular abgeschickt wurde oder nicht? Mit PHP-Code funktioniert es irgendwie nichtmal. Z.B. habe ich ein Feld namens topic - Wenn ich nun folgendes eingebe
PHP-Code:
echo($_POST['topic']);
dann zeigt er mir gar nichts an. Wieso klaut der die POST-Werte einfach?
Wenn ich überprüfen könnte, ob das Formular abgeschickt wurde, könnte ich ja für das Komibinierte Formular ne weitere automatische Weiterleitung einsetzen.
Wenn ich Dich richtig verstehe, möchtest Du zweierlei:
a) die "Weiterleiten zu" ('jumpTo') Seite des Formulars von irgendeinem Wert abhängig machen
b) Weiterleiten zu einem Formular, dieses automatisch mit Werten des ersten Formulars befüllen
Punkt a) kannst Du unter Verwendung des Hooks 'processFormData' umsetzen.
'Registriere' eine eigene Callback-Funktion, indem Du in der Datei system/config/dcaconfig.php folgende Zeile einträgst (Beispiel)
PHP-Code:
$GLOBALS['TL_HOOKS']['processFormData'][] = array('StrangersFormFuncs', 'processFormData');
Dann legst Du in einem Modul-Verzeichnis (irgendein ein Verzeichnis innerhalb system/modules) die Datei 'StrangersFormFuncs.php' an, folgender Inhalt:
PHP-Code:
<?php
class StrangersFormFuncs extends Backend
{
/**
* $arrSubmitted: die 'geposteten' Daten
* $arrForm: Daten (Konfiguration) des Formulars, hier wichtig &$arrForm
* $arrFiles: ggf. per Upload übertragene Dateien
*/
public function processFormData($arrSubmitted, &$arrForm, $arrFiles)
{
// die Funktion soll nur bei z.B. Formular mit ID 15 ausgeführt werden
if ($arrForm['id'] == '15')
{
// wenn Name = 'tom' gepostet wurde, soll zu Seite mit ID 157 weitergeleitet werden
if ($arrSubmitted['name'] == 'tom')
{
$arrForm['jumpTo'] = '157';
}
}
}
}
?>
Die Funktion wird erst nach erfoglreichem (fehlerfreiem) Absenden des Formulars ausgeführt.
Punkt b), Felder im zweiten Formular automatisch mit im ersten Formular eingegeben Werten befüllen:
1. Möglichkeit: die Erweiterung sessionform, dies kann Die automatisch die im ersten Formular eingegebenen (und somit in der Session gespeicherten) Werte in Felder des zweiten Formulars eintragen (sofern deren Namen identisch sind)
2. Möglichkeit: per Hook 'loadFormField' und eigener Klasse/Methode diese Befüllung vornehmen (dabei könnten auch Felder mit abweichenden Namen vorbefüllt werden)
Hoffe, das hilft Dir weiter
Schöne Grüße
Thomas
Lesezeichen