In TYPO3 9.4 wurde die symfony expression language eingeführt. Die alten, „klassischen“ Conditions gelten damit als deprecated und werden in TYPO3 v10 entfernt.
// Beides muss zutreffen: [Condition 1] && [Condition 2] [Condition 1] AND [Condition 2] // Eines von beiden muss zutreffen: [Condition 1][Condition 2] [Condition 1] || [Condition 2] [Condition 1] OR [Condition 2] // Entweder Firefox ODER der Internet Explorer 8+: [browser = firefox] || [browser = msie] && [version => 8] // Weitere Auswahlmöglichkeiten dank 'ELSE': [browser = msie] page.10.value = Internet Explorer [ELSE] page.10.value = Kein Internet Explorer! [END] // Bedingung verneinen: [Condition] [else] page.10.value = Füge direkt nach der Bedingung ein [else] ein. [end]
Anmerkung: die browser
-Conditions sind schon lange aus TYPO3 entfernt, sie dienen nur als nachvollziehbares Beispiel.
Mit der neuen Syntax können Conditions innerhalb der selben Klammer verknüpft werden. Die alte Schreibweise in zwei Blöcken ist zumindest in TYPO3 v9 weiterhin möglich, womöglich aber ebenfalls deprecated. Ich empfehle daher die neue Schreibweise.
// Beides muss zutreffen: [Condition 1 && Condition 2] // Eines von beiden muss zutreffen: [Condition 1 || Condition 2] // Entweder eingeloggt ODER auf der englischen Version der Seite mit ID 75: [frontend.user.isLoggedIn == 1 || getTSFE().id == 75 && siteLanguage("title") == "English"] // Weitere Auswahlmöglichkeiten dank 'ELSE': [loginUser('*')] page.10.value = Der Nutzer ist angemeldet. [ELSE] page.10.value = Der Nutzer ist nicht angemeldet. [END] // Bedingung verneinen: [frontend.user.isLoggedIn != 1] // Neu: Zahlenraum zwischen 18 und 45: [page["uid"] in 18..45]
Es gibt noch einige Möglichkeiten mehr, um Bedingungen abzufragen:
Offizielle Condition-Dokumentation
Derzeit ist diese Dokumentation noch ausbaufähig.
// "Klassische" Condition bis TYPO3 v9: [applicationContext = Staging] [applicationContext = Production/Staging] // Ab TYPO3 9.4 - doppeltes Gleichheitszeichen und Anführungszeichen: [applicationContext == "Development"] [applicationContext == "Production/Staging"]
// "Klassische" Condition bis TYPO3 v9: [globalVar = GP:L = 1] // Ab TYPO3 9.4 - muss übereinstimmen mit Site Configuration: [siteLanguage("locale") == "en_US.UTF-8"] [siteLanguage("title") == "English"]
// "Klassische" Condition bis TYPO3 v9: [globalVar = GP:print > 0] // Ab TYPO3 9.4: [request.getQueryParams() ['print'] > 0] [traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]
Die erweiterte und empfohlene Condition mit traverse
prüft zunächst, ob das Array (hier: tx_news_pi1/news) existiert. Dies verhindert Log-Einträge mit „RuntimeException: Unable to get an item on a non-array“, wenn das Array fehlt.
// "Klassische" Conditions bis TYPO3 v9: [globalVar = TSFE:id=17, TSFE:id=24] // ODER [globalVar = TSFE:page|pid=17, TSFE:page|pid=24] // Ab TYPO3 9.4: [traverse(page, "uid") == 17] [traverse(page, "uid") in [17,24]] [getTSFE().id == 17] [getTSFE().id in [17,24]]
// "Klassische" Condition bis TYPO3 v9: [PIDinRootline = 17, 24] // Ab TYPO3 9.4: [17 in tree.rootLineIds || 24 in tree.rootLineIds]
// "Klassische" Condition bis TYPO3 v9: [PIDupinRootline = 17, 24] // Ab TYPO3 10.3: [17 in tree.rootLineParentIds || 24 in tree.rootLineParentIds]
// "Klassische" Condition bis TYPO3 v9: [treeLevel = 0,2]
// "Klassische" Conditions bis TYPO3 v9: [globalString = IENV:HTTP_HOST = subdomain*] [globalString = IENV:HTTP_HOST = www.example.org] // Ab TYPO3 9.4: [request.getNormalizedParams().getHttpHost() == 'www.example.org'] [like(request.getNormalizedParams().getHttpHost(), '*.test')]
// Ab TYPO3 9.4: [request.getNormalizedParams().isHttps() == false]
// "Klassische" Condition bis TYPO3 v9: [globalVar = TSFE:page|backend_layout = 1] // Ab TYPO3 9.4: [traverse(page, "backend_layout") == 'pagets__2_columns_33_66']
// "Klassische" Condition bis TYPO3 v9: [page|backend_layout = 1] // Ab TYPO3 9.4: [tree.pagelayout == 1] [tree.pagelayout == "pagets__1Column"]
// "Klassische" Conditions bis TYPO3 v9: [usergroup = *] [usergroup = 1,2] // Ab TYPO3 9.4: [usergroup("1,2")]
// "Klassische" Conditions bis TYPO3 v9: [loginUser = *] [loginUser = 1,2] // Ab TYPO3 9.4: // Als beliebiger Frontend-Benutzer angemeldet: [loginUser('*')] [frontend.user.isLoggedIn == 1] //Als ein bestimmter Frontend-Benutzer angemeldet: [frontend.user.userId == 2] // Als einer von mehreren aufgeführten Frontend-Benutzern angemeldet: [loginUser('1,2')] [frontend.user.userId in [1,2]] // Aktuell nicht am Frontend angemeldet: [loginUser('*') == false]
// "Klassische" Condition bis TYPO3 v9: [globalString = TSFE:fe_user|user|username = johndoe]
// "Klassische" Condition bis TYPO3 v9: [globalVar = TSFE : beUserLogin > 0] // Ab TYPO3 9.4: [getTSFE().isBackendUserLoggedIn()]
Zwischenzeitlich gab es einen Bug, wodurch man die Symfony Condition erweitern musste ([getTSFE() && getTSFE().isBackendUserLoggedIn()]
). Dieser ist aber nun in TYPO3 v9 und v10 behoben.
Seit TYPO3 9.5.16 und 10.4.1 ist es alternativ möglich, die verschiedenen [backend.user.*]
Conditions im Frontend zu verwenden:
[backend.user.isLoggedIn] [backend.user.isAdmin] [backend.user.userId == 2]
Quelle: Offizielle Dokumentation (mit Dank an Josef Glatz für den Hinweis!)
// "Klassische" Condition bis TYPO3 v9: [globalVar = LIT:10 < {$konstante}] // Ab TYPO3 9.4: [{$konstante} > 10]
// "Klassische" Condition bis TYPO3 v9: [userFunc = Funktionsname(Parameter)]
// "Klassische" Condition bis TYPO3 v9: [userFunc = TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('extkey')]
Quelle: mbless.de
// Ab TYPO3 9.4: [site("identifier") == "mysite"] [site("base") == "http://local.test/"]
// "Klassische" Condition bis TYPO3 v9: [globalVar = GP:defVals|tt_content|colPos==10] // Ab TYPO3 9.4: [request.getQueryParams()['defVals']['tt_content']['colPos'] == 10]
Quelle: Oliver Hader auf TYPO3 Forge