If Funktionen in TYPO3

If-Funktion Foto Atilla, aboutpixel.de
Bei der Typoscript Programmierung entsteht immer wieder der Wunsch Elemente, die manchmal vorhanden und manchmal nicht vorhanden sind nicht zu wrappen, falls deren Inhalt leer ist. Es kann aber auch der Wunsch bestehen, leere Inhalte in TYPO3 durch alternative Inhalte anzuzeigen.
In TYPO3 bestehen mehrere Möglichkeiten, leere Inhalte abzufangen und gesondert zu behandeln. Dazu gehören die Typoscript If-Funktion, die ifEmty Option von stdWrap sowie speziell bei Menüs die Möglichkeit verschiedene wraps einzusetzen um verschiedene Effekte im Fall von Leeren Untermenüs zu erzielen.
Die ifEmty Option der Typoscript Funktion stdwrap
IfEmpty von stdwrap ist eine relativ simple Möglichkeit Leere Felder in TYPO3 zu ersetzen. Wenn zum Zeitpunkt an dem stdWrap.ifEmpty aufgerufen wird der Inhalt des Elements leer war kann der sonst leere Inhalt durch etwas anderes ersetzt werden.
Beipiel für ifEmpty
20 = TEXT
20.field = description
20.ifEmpty = Keine Beschreibung gefunden
20.wrap = <div id="description">|</div>
Hier gibt es jedoch keine Möglichkeit, den Wrap zu verhindern oder zu ersetzen, wenn der Inhalt des Feldes leer war. Für solche erweitrerten Funktionen bei der Erstzung leerer Inhalte braucht man die IF-Funktion von Typoscript.
Man kann ifEmpty einsetzen um alternative Felder in einer Hirarchie anzugeben, dies wird jedoch schnell unübersichtlich:
20 = TEXT
20.field = tx_user_topmenutitel
20.ifEmpty.cObject = TEXT
20.ifEmpty.cObject.field = nav_title
20.ifEmpty.cObject.ifEmpty = TEXT
20.ifEmpty.cObject.field.ifEmpty = title
Besser man nutz die Kurzschreibweise zur Angabe von Hierarchien der Felder:
20 = TEXT
20.field = tx_user_topmenutitel // nav_title // title
Die If-Funktion
Die If-Funktion kann als unterfunktion von stdWrap aufgerufen werden. Mit der Typoscript If-Funktion sind kompliziertere Abfragen und Lösungen möglich als mit der ifEmpty Funktion von stdWrap. Im Besonderen ist es auch möglich andere Datenbankfelder, ja sogar ganze Objekte darauf zu testen, ob Sie leer sind. So kann man mit der if-Funktion z.B. die Ausgabe eines großen Blocks unterdrücken, wenn eine SQL Abfrage über die Tabelle tt_address kein Ergebnis erzielte:
temp.main = COA
temp.main.20 = COA
temp.main.20 {
[...]
wrap=<div class=”meine-adressen”>|</div>
stdWrap.if.isTrue.cObject = CONTENT
stdWrap.if.isTrue.cObject{
table = tt_address
select {
[...]
}
renderObj = TEXT
renderObj.value = 1
}
}
temp.main.21 = TEXT
temp.main.21 {
wrap=<div class=”keine-adressen”>|</div>
value = Keine Adressen gefunden
stdWrap.if.isFalse.cObject < temp.main.20.stdWrap.if.isTrue.cObject
}
In diesem Fall wird auch der wrap von temp.main.20 nicht angezeigt.
Behandlung leerer Menüs / leerer Untermenüs
Bei der Typoscript Menü Programmierung entstehen häufig auch leere Menüs oder Untermenüs. Wenn diese trotzdem gewrapt werden, so entsteht eine leere Liste der Form <ul></ul> Dieses ist jedoch nicht xHTML valide und erzeugt auch häufig auch Anzeigefehler. Um zu verhindern, dass leere Menüs nicht gewrapt werden muss man jedoch nicht auf die if Funktion zurückgreifen. Wrapt man statt dem HMENU das TMENU (nicht das TEMNUITEM wie NO oder ACT sondern das ganze TMENU) so werden nur TYPO3 Menüs gewrapt, die Elemente enthalten. Wenn keine Seiten gefunden werden, so erzeugt folgendes Menü:
temp.menu = HMENU
temp.menu {
wrap = <div id="menu-platzhalter" ><ul>|</ul></div>
1 = TMENU
1 {
NO.allWrap = <li>|</li>
}
}
Folgende Quellcode Ausgabe, die wegen der leeren Liste nicht xHTML valide ist:
<div id=”menu-platzhalter” ><ul></ul></div>
Folgerndes Typoscript beispiel dagegen:
temp.menu = HMENU
temp.menu {
wrap = <div id="menu-platzhalter" >|</div>
1 = TMENU
1 {
wrap = <ul>|</ul>
NO.allWrap = <li>|</li>
}
}
erzeugt folgende Ausgabe: <div id=”menu-platzhalter” ></div>, die valide ist.
Wenn Items für das Menü verfügbar sind erzeugen beide Menüs den selben Code.
alternativer Inhalt, cObject, ersetzen leerer inhalte, Feld Hierarchie, if, if funktion, ifEmpty, leere Inhalte nicht wrappen, stdwrap, TYPO3, Typoscript, wrap




