Powermail und Powermail Conditions sind hervorragende Erweiterungen zum Umgang mit Formularen in TYPO3, die ich gerne immer wieder einsetze. Mit Powermail Conditions lassen sich abhängig von den Eingaben eines Benutzers weitere Formulaelemente ein- bzw. ausblenden. Das funktioniert auch einwandfrei, allerdings nur, wenn die Elemente auf einer Seite liegen. Hat man ein Formular auf mehreren Seiten und möchte z.B. das eine Auswahl auf Seite 1 Auswirkungen auf Seite 3 und 4 hat, dann steht man vor einem kleine Problem. Laut Dokumentation gibt es für Powermail Conditions (noch) keinen Multipage-Support.
Ich stand jetzt aber vor der Aufgabe, dieses Problem irgendwie zu lösen. Und ich habe es auch geschafft. Und zwar mittels JavaScript. Zuerst habe ich zwei Hilfsfunktionen aus SELFHTML genommen, um einen Cookie schrieben bzw. auslesen zu können:
function WertHolen () {
var Wert = "";
if (document.cookie) {
var Wertstart = document.cookie.indexOf("=") + 1;
var Wertende = document.cookie.indexOf(";");
if (Wertende == -1)
Wertende = document.cookie.length;
Wert = document.cookie.substring(Wertstart, Wertende);
}
return Wert;
}
function WertSetzen (Bezeichner, Wert, Verfall) {
var jetzt = new Date();
var Auszeit = new Date(jetzt.getTime() + Verfall);
document.cookie = Bezeichner + "=" + Wert + "; expires=" + Auszeit.toGMTString() + ";";
}
Als nächstes habe ich dem Formularelement, das für das weitere Formular die Abhängigkeit bestimmt, eine Validierung hinzugefügt. In meinem Fall handelt es sich um eine Drop-Down Box, bei der der Benutzer "ja" oder "nein" auswählen kann. Entsprechend der Auswahl, wird dann der Wert "1" oder der Wert "0" in das Cookie geschrieben.
Validation.add('powermail_uid94','',
function(v) {
var i = document.getElementById('uid94').selectedIndex;
var text = document.getElementById('uid94').options[i].text;
var Verfallszeit = 1000 * 60 * 60 * 24 * 365;
if(text == 'ja') {
WertSetzen("bfm", 1, Verfallszeit);
} else {
WertSetzen("bfm", 0, Verfallszeit);
}
return true;
}
)
Der Rest ist einfach. Auf jeder Seite überprüft jetzt ein JavaScript, ob das abhängige Element vorhanden ist. Wenn es auf der Seite ist, wird abhängig vom Cookie-Wert das Element entweder sichtbar oder unsichtbar geschaltet.
if(WertHolen() == 0) {
if(document.getElementById('powermaildiv_uid15') != null) {
document.getElementById('powermaildiv_uid15').style.display='none';
}
} else {
if(document.getElementById('powermaildiv_uid15') != null) {
document.getElementById('powermaildiv_uid15').style.display='block';
}
}
Zwei kleine Hinweise: Das JavaScript darf erst geladen werden, wenn das Formular bereits generiert ist und die abhängigen Elemente müssen in der CSS-Datei auf jeden Fall eine "display"-Eigenschaft haben. Ist diese Eigenschaft nicht vorhanden, kann man sie auch über JS nicht ändern.


