IF, CASE, CONDITIONTypoScript
TypoScript EinführungConditionsCASEIFLinks
TypoScript Einführung
Was ist TypoScript?TypoScript ist eine Konfigurationssprache die TYPO3 anweist, Daten zu verarbeiten und anzuzeigen (vergleichbar mit XML).Diese Konfigurationssprache ist eines der Hauptmerkmale bei der Unterscheidung von TYPO3 zu einem anderen CMS.Vorteil: TYPO3 wird somit extrem flexibelNachteil:TypoScript bietet eine gewisse Lernhürde
Schritt 1: Statischen Text ausgebenpage = PAGEpage.10 = TEXTpage.10.value = Hello WorldsetupHello WorldHello World<html>
Schritt 2: Statischen Text aus HTML Template ausgebenpage = PAGEpage.10 = TEMPLATEpage.10.template = FILEpage.10.template.file = fileadmin/htmltemplate.htmlsetupHello World<html><head>…</head><body>Hello World</body></html><html>Info: TEMPLATE generiert HTML Head und erlaubt ersetzen von Subparts und Markern
Schritt 3: HTML Template mit Marker ausgebenpage = PAGEpage.10 = TEMPLATEpage.10 {template = FILEtemplate.file = fileadmin/htmltemplate.htmlmarks.MARKER = TEXTmarks.MARKER.value = Ichbinein Marker}setupHello WorldIch bin ein Marker…Hello World<br />Ich bin ein Marker…<html>
Schritt 4: Konstanten nutzenpage = PAGEpage {	10 = TEXT	10.value = {$var}	20 = TEXT	20.value = {$var}	30 < .10	…var = Hello WorldsetupconstantsHelloWorldHelloWorldHello WorldHelloWorldHelloWorldHello World<html>
TypoScriptConditions
Was sind TypoScriptConditions?Conditions sind Bedingungen, die bei Erfüllung eine bestimmte TS Konfiguration zulassen oder ignorieren.Gängige Bedingungen:browser, IP, month, usergroup, PIDupinRootline, globalVar, userFunc
Schritt 5: Conditions nutzenpage.10 = TEXTpage.10.value = Hello World[globalVar = GP:L=1]page.10.value = Hallo Welt[end]setup# index.php?id=1Hello World# index.php?id=1&L=1Hallo Welt<html><html>Info: Conditionsnie innerhalb von geschweiften Klammern nutzen
Schritt 6: Conditions nie innerhalb von geschweiften Klammernpage.10 = TEXTpage.10 {value = lala[globalVar = GP:L=1]value = lulu[end]}page.10 = TEXTpage.10 {value = lala}[globalVar = GP:L=1]page.10.value = lulu[end]setupsetup# immer lalalala# index.php?id=1lala# index.php?id=1&L=1lulu<html><html>
Schritt 7: Weitere Condition Beispiele (month)page.10 = TEXTpage.10.value = {$var}[month = 4,5,6,7,8]var = Es istSommer[end][month = 9,10,11,12,1,2,3,4]var = Es ist Winter[end]setupconstants# SeptemberEs ist Winter# AugustEs ist Sommer<html><html>Info: Conditionskönnen auch in den constants verwendet werden
Schritt 8: Weitere Conditions Beispiele (IP)page.10 = TEXTpage.10.value = Diese Seite ist noch in der Entwicklung[IP = 192.168.*.*]page.10 = TEMPLATEpage.10.template.file = fileadmin/template.html...[end]setup# IntranetAnythingelse# InternetDiese Seite ist noch in der Entwicklung<html><html>
Schritt 9: Weitere Conditions Beispiele (globalVar)# clearsubpartpage.10.subparts.RECHTESPALTE = COApage.10.subparts.RECHTESPALTE {	10 = TEXT	20 = TEXT	30 = TEXT}# showif on PID 1[globalVar = TSFE:id=1]page.10.subparts.RECHTESPALTE.10.value = Du bist auf Home[end]# ifnewsdetailisshown[globalVar = GP:tx_ttnews|tt_news > 0]page.10.subparts.RECHTESPALTE.20.value = News poweredby TYPO3[end]# if powermail mail was sent[globalVar = GP:tx_powermail_pi1|uid40 = *]page.10.subparts.RECHTESPALTE.10.value = Mail wurde abgesendet![end]setup
Schritt 10: Weitere Conditions Beispiele (userFunc)[userFunc = user_test]# do something[else]# do something else[end]setupfunctionuser_test() { if (date('m') == '01') {returntrue; 	} else {returnfalse;	}}<php>…include 'fileadmin/userFunc.php';…localconfInfo: Keine Klassen, nur Funktionen
TypoScript CASE
CASE in TypoScriptÄhnlich der SWITCH Funktion in PHP, kann man mit CASE einen Parameter auf verschiedene Werte vergleichen.Sinn:ist A gleich B, dann X, wenn nicht, ist A gleich C, dann Y, wenn nicht,ist A gleich D, dann ZSchnelle Abarbeitung möglich
Schritt 11: CASE anwenden# page.subtitle could be 1 or 2 or 3lib.object = CASElib.object {key.field = subtitle	default = TEXTdefault.value = Das isteineStandardseite	2 = TEXT	2.value = Hierfindensie die besten News	3 = TEXT	3.value = HierzeigenwirIhnentolleFotos}Page.10.marks.OBJECT < lib.objectsetup
Schritt 12: CASE anwenden (von css_styled_content)# wrap header of a content element…10 = CASE10 {key.field = header_layout	1 = TEXT	1.fontTag = <h1>|</h1>	2 < .1	2.fontTag = <h2>|</h2>	3 < .1	3.fontTag = <h3>|</h3>}…setup
Schritt 13: CASE anwenden (von powermail)object = CASEobject {key.data = TSFE:fe_user|sesData|powermail_5345|uid34default = TEXTdefault.value = Sehr geehrte Frau	Herr = TEXTHerr.value = Sehr geehrter Herr}plugin.tx_powermail_pi1.dynamicTyposcript.test < objectsetupDetails: http://www.typo3.net/index.php?id=13&action=list_post&tid=78897
Schritt 14: CASE anwenden (Extensionentwicklung)temp = CASEtemp {key.field = table	default = TEXTdefault.field = valueurl < .defaulturl.typolink.parameter.field = url}setup$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery (	'title, description, url',	'tx_jump_url', '1', '', '', 1);while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {foreach ($row as $key => $value) {		$this->cObj->start(array('table'=>$key,'value'=>$value), 'table');		$marker['###' . strtoupper($key) . '###'] = 			$this->cObj->cObjGetSingle($conf['temp'], $conf['temp.']);	}}<php>
TypoScriptif
Was ist eine IF Abfrage in TypoScript?TypoScriptIF lässt sich nur bedingt mit einer IF-Abfrage in PHP Vergleichen. Annähernd lassen sich jedoch auch hier bedingte Ausführungen von TypoScript realisieren.Gängige IF Statements in TypoScript:isTrue, isFalse, isPositive, isGreaterThan, isLessThan, equals, isInList, value, negate, directReturn
Schritt 15: Wrap immer vorhanden!?# title: lib.title = TEXTlib.title.field = titlelib.title.wrap = <b>Titel: |</b># title: Seite1lib.title = TEXTlib.title.field = titlelib.title.wrap = <b>Titel: |</b>setupsetupTitel:Titel: Seite1Info: Leerzeichen im Wrap mit noTrimWrap
Schritt 16: Wrap nur wenn Inhalt (Wenn)# title: Seite1lib.title = TEXTlib.title {	field = titlefield.wrap = <b>Titel: |</b>if.isTrue.field = title}# title:lib.title = TEXTlib.title {	field = titlefield.wrap = <b>Titel: |</b>if.isTrue.field = title}setupsetupTitel: Seite1
Schritt 17: Anderer Inhalt wenn Feld leer (COA: Wenn, Dann)lib.title COAlib.title {	10 = TEXT	10.field = title	10.if.isTrue.field = title	20 = TEXT	20.value = Kein Titel für diese Seite vergeben	20.if.isFalse.field = title}setupSeite 1Kein Titel für diese Seitevergeben
Schritt 18: Praxisbeispiel – Anderes HTML Template bei 		Wert in rechter Spaltetemp.maintemplate = COAtemp.maintemplate {	# ifthereiscontent in therightcol	10 = COA	10 {if.isTrue.numRows < styles.content.getRight		10 = TEMPLATE		10 {template = FILEtemplate.file = fileadmin/2cols.html		}	}	# ifthereis NO content in therightcol	20 = COA	20 {if.isFalse.numRows < styles.content.getRight		10 = TEMPLATE		10 {template = FILEtemplate.file = fileadmin/1col.html		}	}}setup
Schritt 18: Praxisbeispiel – Automatisch Zwei-Spaltig durch		anderen Wrappage.10 = TEMPLATEpage.10 {template = FILEtemplate.file = fileadmin/tmpl.htmlsubparts.CONTENT = COAsubparts.CONTENT {		10 = COA		10 {if.isTrue.numRows < styles.content.getLeft			10 < styles.content.getLeft			10.wrap = <divid="col1" class="col">|</div>			20 < styles.content.get			20.wrap = <divid="col2" class="col">|</div>		} 		20 = COA		20 {if.isFalse.numRows < styles.content.getLeft			10 = TEXT			20 < styles.content.get			20.wrap = <divid="col12">|</div>		}	}}setup
Schritt 19: if mit equalslib.foo = TEXTlib.foo {value = News mit UID 2if.value.data = GPvar:tx_ttnews[tt_news]if.equals = 2}setup# &tx_ttnews[tt_news]=1# &tx_ttnews[tt_news]=2News mit UID 2
Schritt 20: negatelib.foo = COAlib.foo {	10 = TEXT	10.value = News mit UID 2	10.if.value.data = GPvar:tx_ttnews[tt_news]	10.if.equals = 2	20 = TEXT	20.value = Andere News	20.if.value.data = GPvar:tx_ttnews[tt_news]	20.if.equals = 2	20.if.negate = 1}setupsetup# Gleiches Resultat mit CASElib.foo = CASElib.foo {key.data = GPvar:tx_ttnews[tt_news]default = TEXTdefault.value = Andere News	2 = TEXT	20.value = News mit UID 2}
Schritt 21: Komplexeres BeispielMenü mit ACT Status anhand GET Parameterlib.menu = HMENUlib.menu {	1 = TMENU	1 {		NO {stdWrap.cObject = COAstdWrap.cObject {				10 = TEXT				10.field = title				10.if {value.field = uidequals.data = GPvar:tx_finder_pi1|page				}				10.wrap = <b>|</b><br />				20 < .10				20.if.negate = 1				20.wrap = |<br />			}		}	}}setup
Allgemeine LinksZum Thema
Einführung conditions:http://www.rainer-grundel.de/wissensdb/typo3/allgemein/artikel/article/condition_fuer_typo3_und_oder_verknuepfung.html
typo3blogger.de (if, case):http://typo3blogger.de/if-abfrage-mit-typoscript/

TYPO3 TypoScript: IF, CASE, CONDITIONS

  • 1.
  • 2.
  • 3.
  • 4.
    Was ist TypoScript?TypoScriptist eine Konfigurationssprache die TYPO3 anweist, Daten zu verarbeiten und anzuzeigen (vergleichbar mit XML).Diese Konfigurationssprache ist eines der Hauptmerkmale bei der Unterscheidung von TYPO3 zu einem anderen CMS.Vorteil: TYPO3 wird somit extrem flexibelNachteil:TypoScript bietet eine gewisse Lernhürde
  • 5.
    Schritt 1: StatischenText ausgebenpage = PAGEpage.10 = TEXTpage.10.value = Hello WorldsetupHello WorldHello World<html>
  • 6.
    Schritt 2: StatischenText aus HTML Template ausgebenpage = PAGEpage.10 = TEMPLATEpage.10.template = FILEpage.10.template.file = fileadmin/htmltemplate.htmlsetupHello World<html><head>…</head><body>Hello World</body></html><html>Info: TEMPLATE generiert HTML Head und erlaubt ersetzen von Subparts und Markern
  • 7.
    Schritt 3: HTMLTemplate mit Marker ausgebenpage = PAGEpage.10 = TEMPLATEpage.10 {template = FILEtemplate.file = fileadmin/htmltemplate.htmlmarks.MARKER = TEXTmarks.MARKER.value = Ichbinein Marker}setupHello WorldIch bin ein Marker…Hello World<br />Ich bin ein Marker…<html>
  • 8.
    Schritt 4: Konstantennutzenpage = PAGEpage { 10 = TEXT 10.value = {$var} 20 = TEXT 20.value = {$var} 30 < .10 …var = Hello WorldsetupconstantsHelloWorldHelloWorldHello WorldHelloWorldHelloWorldHello World<html>
  • 9.
  • 10.
    Was sind TypoScriptConditions?Conditionssind Bedingungen, die bei Erfüllung eine bestimmte TS Konfiguration zulassen oder ignorieren.Gängige Bedingungen:browser, IP, month, usergroup, PIDupinRootline, globalVar, userFunc
  • 11.
    Schritt 5: Conditionsnutzenpage.10 = TEXTpage.10.value = Hello World[globalVar = GP:L=1]page.10.value = Hallo Welt[end]setup# index.php?id=1Hello World# index.php?id=1&L=1Hallo Welt<html><html>Info: Conditionsnie innerhalb von geschweiften Klammern nutzen
  • 12.
    Schritt 6: Conditionsnie innerhalb von geschweiften Klammernpage.10 = TEXTpage.10 {value = lala[globalVar = GP:L=1]value = lulu[end]}page.10 = TEXTpage.10 {value = lala}[globalVar = GP:L=1]page.10.value = lulu[end]setupsetup# immer lalalala# index.php?id=1lala# index.php?id=1&L=1lulu<html><html>
  • 13.
    Schritt 7: WeitereCondition Beispiele (month)page.10 = TEXTpage.10.value = {$var}[month = 4,5,6,7,8]var = Es istSommer[end][month = 9,10,11,12,1,2,3,4]var = Es ist Winter[end]setupconstants# SeptemberEs ist Winter# AugustEs ist Sommer<html><html>Info: Conditionskönnen auch in den constants verwendet werden
  • 14.
    Schritt 8: WeitereConditions Beispiele (IP)page.10 = TEXTpage.10.value = Diese Seite ist noch in der Entwicklung[IP = 192.168.*.*]page.10 = TEMPLATEpage.10.template.file = fileadmin/template.html...[end]setup# IntranetAnythingelse# InternetDiese Seite ist noch in der Entwicklung<html><html>
  • 15.
    Schritt 9: WeitereConditions Beispiele (globalVar)# clearsubpartpage.10.subparts.RECHTESPALTE = COApage.10.subparts.RECHTESPALTE { 10 = TEXT 20 = TEXT 30 = TEXT}# showif on PID 1[globalVar = TSFE:id=1]page.10.subparts.RECHTESPALTE.10.value = Du bist auf Home[end]# ifnewsdetailisshown[globalVar = GP:tx_ttnews|tt_news > 0]page.10.subparts.RECHTESPALTE.20.value = News poweredby TYPO3[end]# if powermail mail was sent[globalVar = GP:tx_powermail_pi1|uid40 = *]page.10.subparts.RECHTESPALTE.10.value = Mail wurde abgesendet![end]setup
  • 16.
    Schritt 10: WeitereConditions Beispiele (userFunc)[userFunc = user_test]# do something[else]# do something else[end]setupfunctionuser_test() { if (date('m') == '01') {returntrue; } else {returnfalse; }}<php>…include 'fileadmin/userFunc.php';…localconfInfo: Keine Klassen, nur Funktionen
  • 17.
  • 18.
    CASE in TypoScriptÄhnlichder SWITCH Funktion in PHP, kann man mit CASE einen Parameter auf verschiedene Werte vergleichen.Sinn:ist A gleich B, dann X, wenn nicht, ist A gleich C, dann Y, wenn nicht,ist A gleich D, dann ZSchnelle Abarbeitung möglich
  • 19.
    Schritt 11: CASEanwenden# page.subtitle could be 1 or 2 or 3lib.object = CASElib.object {key.field = subtitle default = TEXTdefault.value = Das isteineStandardseite 2 = TEXT 2.value = Hierfindensie die besten News 3 = TEXT 3.value = HierzeigenwirIhnentolleFotos}Page.10.marks.OBJECT < lib.objectsetup
  • 20.
    Schritt 12: CASEanwenden (von css_styled_content)# wrap header of a content element…10 = CASE10 {key.field = header_layout 1 = TEXT 1.fontTag = <h1>|</h1> 2 < .1 2.fontTag = <h2>|</h2> 3 < .1 3.fontTag = <h3>|</h3>}…setup
  • 21.
    Schritt 13: CASEanwenden (von powermail)object = CASEobject {key.data = TSFE:fe_user|sesData|powermail_5345|uid34default = TEXTdefault.value = Sehr geehrte Frau Herr = TEXTHerr.value = Sehr geehrter Herr}plugin.tx_powermail_pi1.dynamicTyposcript.test < objectsetupDetails: http://www.typo3.net/index.php?id=13&action=list_post&tid=78897
  • 22.
    Schritt 14: CASEanwenden (Extensionentwicklung)temp = CASEtemp {key.field = table default = TEXTdefault.field = valueurl < .defaulturl.typolink.parameter.field = url}setup$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery ( 'title, description, url', 'tx_jump_url', '1', '', '', 1);while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {foreach ($row as $key => $value) { $this->cObj->start(array('table'=>$key,'value'=>$value), 'table'); $marker['###' . strtoupper($key) . '###'] = $this->cObj->cObjGetSingle($conf['temp'], $conf['temp.']); }}<php>
  • 23.
  • 24.
    Was ist eineIF Abfrage in TypoScript?TypoScriptIF lässt sich nur bedingt mit einer IF-Abfrage in PHP Vergleichen. Annähernd lassen sich jedoch auch hier bedingte Ausführungen von TypoScript realisieren.Gängige IF Statements in TypoScript:isTrue, isFalse, isPositive, isGreaterThan, isLessThan, equals, isInList, value, negate, directReturn
  • 25.
    Schritt 15: Wrapimmer vorhanden!?# title: lib.title = TEXTlib.title.field = titlelib.title.wrap = <b>Titel: |</b># title: Seite1lib.title = TEXTlib.title.field = titlelib.title.wrap = <b>Titel: |</b>setupsetupTitel:Titel: Seite1Info: Leerzeichen im Wrap mit noTrimWrap
  • 26.
    Schritt 16: Wrapnur wenn Inhalt (Wenn)# title: Seite1lib.title = TEXTlib.title { field = titlefield.wrap = <b>Titel: |</b>if.isTrue.field = title}# title:lib.title = TEXTlib.title { field = titlefield.wrap = <b>Titel: |</b>if.isTrue.field = title}setupsetupTitel: Seite1
  • 27.
    Schritt 17: AndererInhalt wenn Feld leer (COA: Wenn, Dann)lib.title COAlib.title { 10 = TEXT 10.field = title 10.if.isTrue.field = title 20 = TEXT 20.value = Kein Titel für diese Seite vergeben 20.if.isFalse.field = title}setupSeite 1Kein Titel für diese Seitevergeben
  • 28.
    Schritt 18: Praxisbeispiel– Anderes HTML Template bei Wert in rechter Spaltetemp.maintemplate = COAtemp.maintemplate { # ifthereiscontent in therightcol 10 = COA 10 {if.isTrue.numRows < styles.content.getRight 10 = TEMPLATE 10 {template = FILEtemplate.file = fileadmin/2cols.html } } # ifthereis NO content in therightcol 20 = COA 20 {if.isFalse.numRows < styles.content.getRight 10 = TEMPLATE 10 {template = FILEtemplate.file = fileadmin/1col.html } }}setup
  • 29.
    Schritt 18: Praxisbeispiel– Automatisch Zwei-Spaltig durch anderen Wrappage.10 = TEMPLATEpage.10 {template = FILEtemplate.file = fileadmin/tmpl.htmlsubparts.CONTENT = COAsubparts.CONTENT { 10 = COA 10 {if.isTrue.numRows < styles.content.getLeft 10 < styles.content.getLeft 10.wrap = <divid="col1" class="col">|</div> 20 < styles.content.get 20.wrap = <divid="col2" class="col">|</div> } 20 = COA 20 {if.isFalse.numRows < styles.content.getLeft 10 = TEXT 20 < styles.content.get 20.wrap = <divid="col12">|</div> } }}setup
  • 30.
    Schritt 19: ifmit equalslib.foo = TEXTlib.foo {value = News mit UID 2if.value.data = GPvar:tx_ttnews[tt_news]if.equals = 2}setup# &tx_ttnews[tt_news]=1# &tx_ttnews[tt_news]=2News mit UID 2
  • 31.
    Schritt 20: negatelib.foo= COAlib.foo { 10 = TEXT 10.value = News mit UID 2 10.if.value.data = GPvar:tx_ttnews[tt_news] 10.if.equals = 2 20 = TEXT 20.value = Andere News 20.if.value.data = GPvar:tx_ttnews[tt_news] 20.if.equals = 2 20.if.negate = 1}setupsetup# Gleiches Resultat mit CASElib.foo = CASElib.foo {key.data = GPvar:tx_ttnews[tt_news]default = TEXTdefault.value = Andere News 2 = TEXT 20.value = News mit UID 2}
  • 32.
    Schritt 21: KomplexeresBeispielMenü mit ACT Status anhand GET Parameterlib.menu = HMENUlib.menu { 1 = TMENU 1 { NO {stdWrap.cObject = COAstdWrap.cObject { 10 = TEXT 10.field = title 10.if {value.field = uidequals.data = GPvar:tx_finder_pi1|page } 10.wrap = <b>|</b><br /> 20 < .10 20.if.negate = 1 20.wrap = |<br /> } } }}setup
  • 33.
  • 34.
  • 35.