Bedingungen in TypoScript
Mit Bedingungen (Conditions) sowie dem if-Statement lässt sich TypoScript in Abhängigkeit von Variablen steuern. Es gibt so viele Variablen zur Verwendung, dass man damit fast jede Aufgabenstellung lösen kann.
Auf dieser Seite haben wir Beispiele für verschiedene Bedingungen zusammengestellt.
Die Bedingungen stehen jeweils in eckigen Klammern [...], bei der Konstruktion mit if wird das jeweilige Objekt nur gültig, wenn die Bedingung erfüllt ist.
Damit Bedingungen funktionieren, muss folgendes beachtet werden:
- Jede Bedingung muss mit der Zeile [global] abgeschlossen werden. Wird das vergessen, so wird der anschließend folgende TypoScript Code anders als beabsichtigt interpretiert
- Bedingungen müssen ausserhalb von {...} Klammer stehen. Beispiel:
## Fehlerhaftes Beispiel!
page.10 {
template.file = fileadmin/template.html
[browser = msie]
template.file = fileadmin/msie_template.html
[global]
}
Diese Bedingung funktioniert nicht, da sie innerhalb von {...} steht.
Statt dessen muss man es so schreiben:
page.10.template.file = fileadmin/template.html
[browser = msie]
page.10.template.file = fileadmin/msie_template.html
[global]
Wochentage
Donnerstags soll ein anderes Template verwendet werden als an den anderen Wochentagen:
config.cache_clearAtMidnight = 1
page.10.template.file = fileadmin/normal_template.html
[dayofweek = 4] # 0 = Sunday, 1 = Monday, ...
page.10.template.file = fileadmin/thursday_template.html
[global]
Mit config.cache_clearAtMidnight sorgt man dafür, dass die Seite beim ersten Abruf nach Mitternacht neu erzeugt wird (normalerweise werden Seiten nach jeweils 24 Stunden neu erzeugt und im Zwischenspeicher abgelegt).
Änderungen nur für eine einzige Seite
Nimmt man mit TypoScript im Template (oder Extension-Template) Änderungen vor, so gelten diese für die aktuelle Seite sowie alle Unterseiten.
Möchte man jedoch nur Änderungen für eine einzige Seite (ohne die Unterseiten) vornehmen, dann ist dies mit einer Bedingung möglich. In diesem Fall wird die globale Variable TSFE:id (das ist die Page-ID) verwendet:
[globalVar = TSFE:id=1234]
// hier der Code, der nur für Seite 1234 gültig ist
[global]
Alternativ kann statt TSFE:id auch die Variable TSFE:page|pid verwendet werden. Soll die Bedingung für mehrere Seiten (ODER-Verknüpfung) gelten, so werden mehrere Bedingungen durch Komma getrennt:
[globalVar = TSFE:id=10, TSFE:id=20, TSFE:page|pid=30]
colPos: Unterschiedliche Konfiguration je nach Spalte
Möchte man unterschiedliche Formatierungen je nach Spalte, so erzielt man das am einfachsten per CSS, in dem um jede Spalte ein div-Tag gelegt wird.
Etwas schwieriger wird es, wenn man Änderungen im TypoScript in Abhängigkeit von der Spalte (colPos) erzielen möchte.
Ein Beispiel: Jedem Link im Text soll eine kleine Grafik voran- oder nachgestellt werden. Jedoch soll die Grafik in jeder Contentspalte unterschiedlich sein.
Das Einfügen einer Grafik vor einem Textlink erreicht man mit diesem TypoScript-Code:
tt_content.text.20.parseFunc.tags.link.prepend = IMAGE
tt_content.text.20.parseFunc.tags.link.prepend.file = fileadmin/images/image.gif
Um je nach Spalte eine andere Grafik zu verwenden, bedient man sich eines kleinen Tricks: Es wird ein temporäres COA (Content Object Array) erstellt, also ein Content-Objekt, das wiederum andere Objekte enthält. Mit Hilfe der if-Funktion werden dann die Objekte wieder gelöscht, die in der aktuellen Spalte nicht vorkommen sollen:
temp.linkimage = COA
temp.linkimage.10 = IMAGE
temp.linkimage.10.file = fileadmin/images/bild1.gif
temp.linkimage.10.if {
value = 0
equals.field = colPos
}
temp.linkimage.20 = IMAGE
temp.linkimage.20.file = fileadmin/images/bild2.gif
temp.linkimage.20.if {
value = 1
equals.field = colPos
}
temp.linkimage.30 = IMAGE
temp.linkimage.30.file = fileadmin/images/bild3.gif
temp.linkimage.30.if {
value = 2
equals.field = colPos
}
tt_content.text.20.parseFunc.tags.link.prepend < temp.linkimage
In der letzten Zeile wird dann das temporäre COA in das Textlink-Objekt kopiert. Obwohl also drei Bildelemente definiert wurden, enthält das COA letztendlich nur eine Grafik, da von den drei if-Bedingungen nur jeweils eine erfüllt ist.
Will man die Zusatzgrafik hinter statt vor einem Link, ersetzt man im Code "prepend" durch "append".