TYPO3 - Template-Auswahl

Aus Wikizone
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Diese Seite zeigt verschiedene Methoden um Templates auszuwählen

Template Switcher Extension[Bearbeiten]

Funktioniert sehr zuverlässig. Thumbnails möglich. Old School weil es früher keine guten Bordmittel für komplexe Layouts gab.

Template Switch über Backend Layout Feld (BE-Grids)[Bearbeiten]

ab 4.5

BE-Layouts definieren[Bearbeiten]

  • Ordner erstellen und Datensätze "Backendlayout" erstellen.
  • Über TS den Ort der Layouts definieren (Zugriff für Redakteure nicht vergessen):

TypoScript

##id storagepage of gridlayout
TCEFORM.pages.backend_layout.PAGE_TSCONFIG_ID=29
TCEFORM.pages.backend_layout_next_level.PAGE_TSCONFIG_ID=29

##hide "no backend layout" label
#TCEFORM.pages.backend_layout_next_level.removeItems= -1
#TCEFORM.pages.backend_layout.removeItems= -1

#give "empty" label a better name
TCEFORM.pages.backend_layout.altLabels.0 = Vordefiniertes Layout

Beispiel Layout Grid (Achtung colspan mit kleinem s)

backend_layout {
	colCount = 2
	rowCount = 2
	rows {
		1 {
			columns {
				1 {
					name = Oben
					colPos = 0
                                        colspan = 2
				}
			}
		}
		2 {
			columns {
				1 {
					name = Links
					colPos = 1
				}
				2 {
					name = Rechts
					colPos = 2
				}
			}
		}
	}
}

Frontend Anpassungen anhand backend_layout Feld[Bearbeiten]

Beispiel CSS Klasse für Body-Tag[Bearbeiten]

##... class for body tag (usefull for css definitions)
temp.selectbodytag = CASE
temp.selectbodytag {
   key.field = backend_layout
   key.ifEmpty.data = levelfield:-2, backend_layout_next_level, slide
   default = TEXT
   default.value = l1
   1 = TEXT
   1.value = l1
   2 = TEXT
   2.value = l2
   3 = TEXT
   3.value = l3
   stdWrap.wrap = <body class ="|">
}
page.bodyTagCObject < temp.selectbodytag

Beispiel für Auswahl verschiedener Header Dateien[Bearbeiten]

page.headerData.10 = CASE
page.headerData.10 {
  stdWrap.wrap = <link rel="stylesheet" type="text/css" href="fileadmin/templates/css/|" media="all" />
  key.data = levelfield:-1, backend_layout_next_level, slide
  key.override.field = backend_layout
  default = TEXT
  default.value = layout1.css
  2 = TEXT
  2.value = layout2.css
  3 = TEXT
  3.value = layout3.css
}

Beispiel für Auswahl eines Fluid Templates[Bearbeiten]

### FLUID ###
// include in fluid template via cObject Viewhelper:  <f:cObject typoscriptObjectPath="lib.content" />
lib.content         < styles.content.get
lib.contentLeft     < styles.content.getLeft
lib.contentRight    < styles.content.getRight

temp.myFluid = FLUIDTEMPLATE
temp.myFluid{
  #file = fileadmin/templates/fluid/portal.html
  partialRootPath = fileadmin/templates/fluid/partials/
  layoutRootPath = fileadmin/templates/fluid/layouts/
  variables {
  // Variante: include in fluid template like this: <f:format.raw>{content}</f:format.raw>
  #    content < styles.content.get
  #    content.select.where = colPos = 0
  # ...
  }
  file.cObject = CASE
  file.cObject{
    key.data = levelfield:-1, backend_layout_next_level, slide
    key.override.field = backend_layout
    default = TEXT
    default.value = fileadmin/templates/fluid/portal.html
    2 = TEXT
    2.value = fileadmin/templates/fluid/oneCol.html
    3 = TEXT
    3.value = fileadmin/templates/fluid/twoCols.html  
  }
}

#Zusätzlicher Main Wrap um den Content in Abhängigkeit vom backend_layout (praktisch für zusätzliche CSS Definitionen und wenn man die Body Klasse nicht nutzen  will.
#temp.myFluid.stdWrap.wrap.cObject = CASE
#temp.myFluid.stdWrap.wrap.cObject {
#  key.field = backend_layout
#  key.ifEmpty.data = levelfield:-2, backend_layout_next_level, slide
#  default = TEXT
#  default.value = <div class="portal">|</div>
#  2 = TEXT
#  2.value = <div class="oneCol">|</div>
#  3 = TEXT
#  3.value = <div class="twoCols">|</div>
#}

page.10 < temp.myFluid

Template Switch über FE-Layout Feld[Bearbeiten]

Schnelle Lösung für viele Seiten ausreichend wenn keine komplexen Layouts notwendig sind.

Bezeichnungen anpassen[Bearbeiten]

TypoScript

TCEFORM.pages.layout {
  altLabels {
    0 = 1 Spalter
    1 = 2 Spalter
    2 = Portalseite
  }
  removeItems = 3
}

Template Auswahl[Bearbeiten]

page.10 = TEMPLATE
page.10.template = FILE
page.10.template.file = fileadmin/templates/html/1col.html
[globalVar = TSFE:page|layout = 1]
page.10.template.file = fileadmin/template/html/2col.html
[globalVar = TSFE:page|layout = 2]
page.10.template.file = fileadmin/template/html/portal.html
[global]

Template Auswahl für Fluid[Bearbeiten]

Todo

Spalten abhängig von BE-Layout Feld ausgeben[Bearbeiten]

Geht von Subparts "contentWrap" aus.

page = PAGE
page {
   ##css class in body tag (s.o.)
   bodyTagCObject < temp.selectbodytag  
   10 = TEMPLATE
   ...
   10.subparts {
     contentWrap = COA
     contentWrap.10 < styles.content.get
     contentWrap.10.wrap = <div id="contentTop">|</div>

     contentWrap.20 = COA   
     contentWrap.20.if {
     ## backend layout query by uid 
       value = 1,2
       isInList.data = levelfield:-2,backend_layout_next_level,slide
       isInList.override.data = TSFE:page|backend_layout
    }
     contentWrap.20.wrap = <div> | </div>
     contentWrap.20.10 < styles.content.get
     contentWrap.20.10.select.where = colPos = 1
     contentWrap.20.10.wrap = <div id="contentLeft">|</div>
     contentWrap.20.20 = COA
     contentWrap.20.20 {
       if {
           value = 2
           isInList.data = levelfield:-2,backend_layout_next_level,slide
           isInList.override.data = TSFE:page|backend_layout
       }  
       10 < styles.content.get
       10.select.where = colPos = 2
       10.wrap = <div class="contentMiddle">|</div>
     }
     contentWrap.20.30 = COA
     contentWrap.20.30 {
       if {
           value = 3
           isInList.data = levelfield:-2,backend_layout_next_level,slide
           isInList.override.data = TSFE:page|backend_layout
       }  
       10 < styles.content.get
       10.select.where = colPos = 5
       10.wrap = <div class="contentMiddle">|</div>
       20 < styles.content.get
       20.select.where = colPos = 6
       20.wrap = <div class="contentMiddle">|</div>
     }
     contentWrap.20.40 < styles.content.get
     contentWrap.20.40.select.where = colPos = 3
     contentWrap.20.40.wrap = <div id="contentRight">|</div>     

     ##bottom box     
     contentWrap.30 < styles.content.get
     contentWrap.30.select.where = colPos = 4
     contentWrap.30.wrap = <div id="contentBottom">|</div>
        
     }
 }