Zum Inhalt springen

Hi-hi-hilfääää content ifEmpty abfrage

Erstellt am 19. März 2004 · 4 Antworten · letzte Antwort am 20. März 2004

Tags: Frage

jabba ·

Hi,

ich möchte gerne ein content-Feld mit einem Rahmen wrappen. Allerdings soll das nur passieren, wenn das content-Feld auch Inhalt hat. Das heisst, wenn das Feld leer ist soll auch kein Rahmen um den leeren Inhalt gebastelt werden.
Ich habe jetzt schon ziemlich lange dran rumprobiert, aber irgendwie funzt es nicht. 🙁

Das habe ich mal in der Typo3 Doku gefunden:

page.10 = TEXT
page.10.field = subtitle
page.10.ifEmpty = Hello world

Bei mir klappt es aber nicht mit dem ifEmpty, kann bzw. muss man das vielleicht mit conditions machen? Hab's damit allerdings auch noch nicht hinbekommen.

P.S.: Habe schon 3-4 Threads hier und in anderen Foren zum gleichen Thema gefunden, allerdings immer ohne Antwort. Hoffentlich habe ich mehr Glück 🙂

jabba ·

Hi,

ich bin jetzt einen Schritt weitergekommen. Habe das hier im Netz gefunden und klappt auch soweit. Das heisst er gibt mir ein Warnungs-Bildchen aus, wenn kein content vorhanden ist. Allerdings setzt er mir den Rahmen jetzt auch, wenn das content-Element leer ist und das soll er ja nicht.
Finde in dem Code allerdings keinen Fehler. Rein logisch müsste es gehen ...
Hat einer von euch ne Idee?

http://typo3.org/1422+M578ca6735f1.0.html

cadreTop = HTML
cadreTop.value (
<table border=1>
<tr>
<td>
)


cadreBottom = HTML
cadreBottom.value (
</td>
</tr>
</table>
)

leftContent = COA
leftContent {
10 < cadreTop
10.wrap = |
10.if.isTrue.numRows < styles.content.getLeft 
# Create '10' if there's CONTENT in styles.content.getLeft

20 = TEXT
20.value = <img src="fileadmin/templates/gfx/warning.gif">
20.wrap = | <br>
20.if.isFalse.numRows < styles.content.getLeft
# Create '20' if there's NO CONTENT in styles.content.getLeft

30 < styles.content.getLeft

40 < cadreBottom
40.wrap = |
40.if.isTrue.numRows < styles.content.getLeft
# Create '40' if there's CONTENT in styles.content.getLeft
sacha ·

Hi,

du kannst es mit override lösen:

page.10 = TEXT
page.10.value = Hello world
page.10.override.field = subtitle

Bedeutet: page.10 wird als Textobjekt definiert und mit dem Wert "Hello world" gefüllt.

In der nächsten Zeile wird überprüft, ob im subtitle-Feld etwas steht. Wenn ja, wird der Wert von page.10 mit dem Wert aus dem subtitle-Feld überschrieben.

Auf dieser Seite: http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=269&tx_extrepmgm_pi1[tocEl]=799&cHash=6e5c3e900d
sind ein paar nette Beispiele dazu.

Ich verwende auf einer Seite was ähnliches, um einen Marker mit Inhalt zu füllen. Nur wenn es tatsächlich Inhalt für den Marker gibt, wird ein div drumrum gewrapt. Vielleicht hilft dir das ja:

  marks.INHALT = COA
  marks.INHALT {
    10 = TEXT
    10 {
      value = {page:subtitle}
      insertData = 1 
      stdWrap.required = 1
      stdWrap.wrap = <div id="rahmen">|</div>
    }
  }

Ciao,
Sacha

jabba ·

Hi Sacha,

deine Lösung hatte ich auch erst überlegt. Ich weiss allerdings nicht wie ich den Haupttext, also nicht die Überschrift, in das Value-Feld bekomme. Habe da in den Tutorials auch kein passendes Beispiel gefunden. Es wurde immer nur als Beispiel title oder subtitle verwendet und nie der Haupttext. Vielleicht ist das auch gar nicht möglich mit value.
Wenn ich z.B. schreibe: value = {page:content} dann passiert da gar nichts bei mir.

Habe jetzt eine Lösung gefunden, allerdings ohne wrap:

# Hiermit wird der Inhalt in eine Rahmenbox gepackt
marks.BOX_INHALT = COA 
  marks.BOX_INHALT {
    # Rahmen Anfang
    10 = TEXT
    10.value = <table width="99%" border="0" align="center" cellpadding="1" cellspacing="1"><tr><td>
    10.if.isTrue.numRows < styles.content.getLeft
   
    # Inhalt innerhalb des Rahmens
    20 = TEXT    
    20.if.isTrue.numRows < styles.content.getLeft
    20 < styles.content.getLeft

    # Rahmen Ende
    30 = TEXT
    30.if.isTrue.numRows < styles.content.getLeft
    30.value = </td></tr></table>

Gruß,
Alex

sacha ·

Hi,

jabba schrieb

deine Lösung hatte ich auch erst überlegt. Ich weiss allerdings nicht wie ich den Haupttext, also nicht die Überschrift, in das Value-Feld bekomme.

Vielleicht ist das auch gar nicht möglich mit value.
Wenn ich z.B. schreibe: value = {page:content} dann passiert da gar nichts bei mir.

stimmt, das kann nicht funktionieren, denn mit der value-Schreibweise oben sprichst du Felder der Tabelle pages an. Da die Tabelle pages kein content Feld hat, funktioniert es auch nicht. Schau die mal mit dem phpMyAdmin die Tabellen an, da wird manches klarer.

Die Inhalte einer Seite stehen ja in der Tabelle tt_content, zumindest die Inhalte aus den normalen Inhaltselementen. Die Zuordnung der Inhaltselemente zu einer bestimmten Seite erfolgt über das Feld PID in der Tabelle tt_content. Um zu verstehen, wie Typo den Inhalt mit styles.content.getLeft zusammenstellt, solltest du dir mal mit dem Template-Analyzer styles.content ansehen.

Habe jetzt eine Lösung gefunden, allerdings ohne wrap:

mit wrap ginge es so:

# Hiermit wird der Inhalt in eine Rahmenbox gepackt
marks.BOX_INHALT = COA
marks.BOX_INHALT {
  10 < styles.content.getLeft
  stdWrap.required = 1
  stdWrap.wrap = <table width="99%" border="0" align="center" cellpadding="1" cellspacing="1"><tr><td> | </td></tr></table> 
}

Wobei ein <div id="inhaltsbox">|</div> natürlich sinnvoller wäre, als eine Tabelle.

Ciao,
Sacha