TemplaVoilà Bildbreite dynamisch angeben mit Default-Wert

Montag, 22. März 2010

Problem: Ich habe ein Template erstellt, das ein DIV mit einem Bild enthält. Ich mappe in TemplaVoilà das Bild auf den Content-Typ “Bild”, möchte aber dem Benutzer noch die Möglichkeit geben, die Bildbreite selbst anzugeben. Dazu habe ich ein Textfeld gemapped mit der Bezeichnung “field_image_width”. Zusätzlich soll – falls er keine Bildbreite angegeben wird – ein Default-Wert genommen werden.

So muss man den entsprechenden Abschnitt in der XML-Datenstruktur von TemplaVoilà anpassen:

<TypoScript>
   10 = COA
   10 = IMAGE
   10.file.import = uploads/tx_templavoila/
   10.file.import.current = 1
   10.file.import.listNum = 0
   10.file.maxW.field = field_image_width
 
   10.file.maxW.override = 200
   10.file.maxW.override.if.isFalse.field = field_image_width
 
   10.stdWrap.typolink.parameter.field = field_link
</TypoScript>

Update: Geht auch kürzer das Ganze…

10 = IMAGE
10.file {
   import = uploads/tx_templavoila/
   import.current = 1
   import.listNum = 0
   width = 200
   width.override.field = field_imgwidth
   height = 800m
   height.override.field = field_imgheight
}

Damit bei dem gemappten Feld “Link” ein eigener Text statt des Seiten-Names erscheint, hilft dieses Script, ebenfalls in der XML-Datenstruktur des Template-Objektes:

<TypoScript>
	10 = TEXT
	10.value = Weiterlesen...
	10.lang.en = Read on...
	10.typolink.parameter.current = 1
</TypoScript>

Schöne Ergänzung: Für eine Bildgalerie soll in den Seiteneigenschaften der Seite eine Anzahl von Bildern pro Zeile (TemplaVoilà-Feld: field_imgs_per_row) und eine Bildhöhe (TemplaVoilà-Feld: field_imgs_height) angegeben werden. Diese Felder werden über kbtvcontslide vererbt.

Anhand der Spaltenbreite von 700px sollen die Bilder auf die passende Größe umgerechnet werden, damit genau die angegebene Anzahl an Bildern nebeneinander ins Layout passt:

10 = IMAGE
10.file {
  ...
  width = 200
  width.override.cObject = COA
  width.override.cObject {
    wrap = 700/|
    stdWrap.prioriCalc = 1
    10 = TEXT
    10 {
      postUserFunc = tx_kbtvcontslide_pi1->main
      postUserFunc.field = field_imgs_per_row
    }
  }
 
  height = 100c
  height.override.cObject = COA
  height.override.cObject {
    wrap = |c
    10 = TEXT
    10 {
      postUserFunc = tx_kbtvcontslide_pi1->main
      postUserFunc.field = field_imgs_height
    }
  } 
}