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.




Kommentare
Mo, 21.11.2011 20:33
jetzt wird alles besser !Neuer Trainer und entlich ein neuer zweiter Spieler.Kann nur sage n super Wagner!!!!!!!
Mo, 21.11.2011 18:55
vom trainerverschleiß vergleic hbar mit dem hsv, vom spielern achkaufniveau vergleichbar mit den wölfen aus der vw-s [...]
Mo, 21.11.2011 16:58
Umbruch und Umbau??? Gerne hä tten das ALLE Fans "VOR" der S aison gesehen und nicht wenn e s als Zuschauer -keinen- [...]
Sa, 19.11.2011 16:08
Das mit dem Auspfeiffen sehe i ch nicht als so schlimm an. De r Fan darf sein Team bejubeln, der Fan darf schweigen, [...]
Sa, 19.11.2011 16:07
Ob das unbedingt der Center ma chen muss, darüber lässt sich natürlich streiten. Ich denke, das ist auch immer ein [...]