Zum Inhalt springen

Formhandler löscht values bei Verwendung von Arrays

Erstellt am 4. Dezember 2013 · 1 Antwort · letzte Antwort am 5. Dezember 2013

Tags: Formhandler, TYPO3 4.x, Frage

christianknell ·

Hallo miteinander,

Ich rätsel jetzt schon seit einigen Stunden und hab nun keine Idee mehr um mein Problem zu lösen. Vielleicht habt ihr ja ne Idee.

Danke euch auf jeden Fall schon mal!

Ich verwende Formhandler um ein Formular auf einer TYPO3-Seite zu erstellen. Dies funktioniert auch absolut einwandfrei und ich bin sehr zufrieden damit, aber eine kleine Sache bekomm ich einfach nicht zum Laufen: Ich hab mehrere Checkboxen mit dem Namen "whyVisit", von denen mindestens 1 aktiviert werden soll. Dies erreiche ich indem ich zunächst den Namen der Checkboxen zu einem Array umgestalte (siehe Template).

In meinem TypoScript überprüft die Zeile

whyVisit.errorCheck.1 = required

ob eine Checkbox aktiviert wurde, falls nicht wird eine Fehlermeldung beim Marker

###error_whyVisit###

ausgegeben. Dies funktioniert auch einwandfrei.

DAS PROBLEM ist nun folgendes: Alle nachfolgenden Input- und Select-Felder behalten beim Absenden des Formulars ihre Werte nicht.

Wenn ich bspw. dem Input-Feld "whyVisitOther" (siehe Template) den Inhalt "Test-Inhalt" mitgebe, wird er mir beim erneuten Anzeigen meines Formulars zwar im DEBUG-Bereich als Inhalt angezeigt, jedoch im HTML-Quellcode ist das value-Attribut leer und damit logischerweise auch die Anzeige meines Formulars.

Ändere ich nun den Namen meiner Checkboxen wieder ab und entferne die Arrays funktioniert die Übertragen der anderen Felder einwandfrei, jedoch funktioniert meine Validierung, ob eine Checkbox aktiviert wurde nicht mehr.

Hier der Ausschnitt aus meinem Template:

<h2 id="whyVisist">###LLL:whyVisit###</h2>
			
###error_whyVisit###
<div class="line">
	<div class="lineOneThird">
		<input type="checkbox" value="###LLL:whyVisit01###" name="formhandler[whyVisit][]" tabindex="210" ###checked_whyVisit_###LLL:whyVisit01######/>
		<label>###LLL:whyVisit01###</label>
	</div>
	<div class="lineOneThird">
		<input type="checkbox" value="###LLL:whyVisit02###" name="formhandler[whyVisit][]" tabindex="220" ###checked_whyVisit_###LLL:whyVisit02######/>
		<label>###LLL:whyVisit02###</label>
	</div>
	<div class="lineOneThird">
		<input type="checkbox" value="###LLL:whyVisit03###" name="formhandler[whyVisit][]" tabindex="230" ###checked_whyVisit_###LLL:whyVisit03######/>
		<label>###LLL:whyVisit03###</label>
	</div>
</div>
			
<div class="line">
	<div class="lineOneThird">
		<input type="checkbox" value="###LLL:whyVisit07###" name="formhandler[whyVisit][]" tabindex="270" ###checked_whyVisit_###LLL:whyVisit07######/>
		<label>###LLL:whyVisit07###</label>
	</div>
	<div class="lineTwoThird">
		<label>###LLL:whyVisitOther###</label>
		<input type="text" value="###value_whyVisitOther###" name="formhandler[whyVisitOther]" class="twoThird" tabindex="280"/>
	</div>
</div>
<!-- WhyVisit End -->
christianknell ·

Hab zwar immernoch keine Ahnung wieso das so nicht geht bzw. warum er mir meine nachfolgenden Werte nicht speichert, aber dafür hab ich jetzt nen Workaround gefunden:

1. Alle Checkboxen erhalten unterschiedliche Namen (bei mir nun whyVisit01, whyVisit02, ... whyVisit07)
2. Mittels TypoScript werden alle Checkboxen auf required gesetzt

whyVisit01.errorCheck.1 = required
whyVisit02.errorCheck.1 = required
whyVisit03.errorCheck.1 = required
whyVisit04.errorCheck.1 = required
whyVisit05.errorCheck.1 = required
whyVisit06.errorCheck.1 = required
whyVisit07.errorCheck.1 = required
whyVisitOther.errorCheck.1 = required

3. Im HTML-Template wird jedoch nur ein Marker für eine beliebige Checkbox hinterlegt:

###error_whyVisit01###

4. Hinterlegen der Error-Message in der Language-File
5. Mittels TypoScript wird die Fehlerüberprüfung aller Checkboxen abgeschaltet, sobald eine aktiviert wurde:

3 {
	conditions.OR1.AND1 = whyVisit01>
	isTrue {
		validators.1.config.disableErrorCheckFields = whyVisit02, ..., whyVisit07, whyVisitOther
	}
}
4 {
	conditions.OR1.AND1 = whyVisit02>
	isTrue {
		validators.1.config.disableErrorCheckFields = whyVisit01, ..., whyVisit07, whyVisitOther
	}
}
...
10 {
	conditions.OR1.AND1 = whyVisitOther>
	isTrue {
		validators.1.config.disableErrorCheckFields = whyVisit01, ..., whyVisit06, whyVisit07
	}
}