TYPO3 Blog ++ Typoscript ++ If Funktionen in TYPO3

If Funktionen in TYPO3

Ersetzen leerer Inhalte
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&gt</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&gt</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.

, , , , , , , , , , ,

Hinterlasse eine Antwort