Conditions¶
See also
For full explanations about conditions, especially about condition syntax, please refer to the TypoScript Syntax chapter of the Core API. The "new" condition syntax (since TYPO3 v9.4) is based on the Symfony expression language.
TypoScript also offers the "if" function to create conditions.
Reference¶
Variables¶
The following variables are available. The values are context related.
applicationContext¶
- Variable
applicationContext
- Type
String
- Description
Current application context as string.
See Application context.
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[applicationContext == "Development"]
Any context that is "Production" or starts with "Production" (eg Production/Staging").
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[applicationContext matches "/^Production/"]
page¶
Note
page
is only available in the frontend context. As the TypoScript setup may be
loaded in some backend modules or the CLI context, it is considered best practice to always
guard the property by using the function traverse()
- Variable
page
- Type
Array
- Description
All data of the current page record as array. To find out which fields are available, you can enable the debug mode in the TYPO3 backend which will display the field names.
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
# Check single page uid [traverse(page, "uid") == 2] # Check list of page uids [traverse(page, "uid") in [17,24]] # Check list of page uids NOT in [traverse(page, "uid") not in [17,24]] # Check range of pages (example: page uid from 10 to 20) [traverse(page, "uid") in 10..20] # Check the page backend layout [traverse(page, "backend_layout") == 5] [traverse(page, "backend_layout") == "example_layout"] # Check the page title [traverse(page, "title") == "foo"]
Constant¶
- Variable
{$foo.bar}
- Type
Constant
- Description
Any TypoScript constant is available like before. Depending on the type of the constant you have to use different conditions.
- Example
If constant is an integer:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[{$foo.bar} == 4711]
If constant is a string put constant in quotes:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶["{$foo.bar}" == "4711"]
tree¶
- Variable
tree
- Type
Object
- Description
Object with tree information.
tree.level¶
- Variable
tree.level
- Type
Integer
- Description
Current tree level.
- Example
Check whether page is on level 0:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[tree.level == 0]
tree.pagelayout¶
New in version 11.0.
- Variable
tree.pagelayout
- Type
Integer / String
- Description
Check for the defined backend layout of a page including the inheritance of the field
Backend Layout (subpages of this page)
. The condition is enabled for frontend and backend.- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
# Using backend_layout records [tree.pagelayout == 2] page.1 = TEXT page.1.value = Layout 2 [END] # Using TSconfig provider of backend layouts [tree.pagelayout == "pagets__Home"] page.1 = TEXT page.1.value = Layout Home [END]
tree.rootLine¶
- Variable
tree.rootLine
- Type
Array
- Description
Array of arrays with uid and pid.
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[tree.rootLine[0]["uid"] == 1]
tree.rootLineIds¶
- Variable
tree.rootLineIds
- Type
Array
- Description
An array with UIDs of the rootline.
- Example
Check whether page with uid 2 is inside the root line:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[2 in tree.rootLineIds]
tree.rootLineParentIds¶
New in version 10.3: This implements the old PIDupinRootline
condition within the Symfony
expression language, see
Feature: #88962 - Re-implement old PIDupinRootline TypoScript condition
- Variable
tree.rootLineParentIds
- Type
Array
- Description
An array with parent UIDs of the root line.
- Example
Check whether page with uid 2 is the parent of a page inside the root line:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[2 in tree.rootLineParentIds]
backend¶
- Variable
backend
- Type
Object
- Description
Object with backend information.
backend.user¶
- Variable
backend.user
- Type
Object
- Description
Object with current backend user information.
backend.user.isAdmin¶
- Variable
backend.user.isAdmin
- Type
Boolean
- Description
True if current user is admin
- Example
Evaluates to true if current BE-User is administrator:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[backend.user.isAdmin]
backend.user.isLoggedIn¶
- Variable
backend.user.isLoggedIn
- Type
Boolean
- Description
true if current user is logged in
- Example
Evaluates to true if an BE-User is logged in:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[backend.user.isLoggedIn]
backend.user.userId¶
- Variable
backend.user.userId
- Type
Integer
- Description
UID of current user
- Example
Evaluates to true if user uid of current logged in BE-User is equal to 5:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[backend.user.userId == 5]
backend.user.userGroupIds¶
- Variable
backend.user.userGroupList
- Type
array
- Description
Array of user group ids of the current backend user
- Context
Frontend, Backend
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[2 in backend.user.userGroupIds]
backend.user.userGroupList¶
New in version 11.2: Starting with TYPO3 v11.2 backend.user.userGroupIds
,
an array has been added. Use this instead of like
expressions to test for the user group of the current
backend user.
- Variable
backend.user.userGroupList
- Type
String
- Description
Comma list of group UIDs
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[like(","~backend.user.userGroupList~",", "*,1,*")]
frontend¶
- Variable
frontend
- Type
Object
- Description
object with frontend information (available in FE only)
frontend.user¶
- Variable
frontend.user
- Type
Object
- Description
Object with current frontend user information.
frontend.user.isLoggedIn¶
- Variable
frontend.user.isLoggedIn
- Type
Boolean
- Description
True if current user is logged in
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[frontend.user.isLoggedIn]
frontend.user.userId¶
- Variable
.user.userId
- Type
Integer
- Description
UID of current user
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[frontend.user.userId == 5]
frontend.user.userGroupIds¶
- Variable
frontend.user.userGroupList
- Type
array
- Description
Array of user group ids of the current frontend user
- Context
Frontend
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[4 in frontend.user.userGroupIds]
frontend.user.userGroupList¶
New in version 11.2: Starting with TYPO3 v11.2 frontend.user.userGroupIds
,
an array has been added. Use this instead of like
expressions to test for the user group of the current
frontend user.
- Variable
frontend.user.userGroupList
- Type
String
- Description
Comma list of group UIDs
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[like(","~frontend.user.userGroupList~",", "*,1,*")]
workspace¶
New in version 10.3: Feature: #90203 - Make workspace available in TypoScript conditions
- Variable
workspace
- Type
Object
- Description
object with workspace information
workspace.workspaceId¶
New in version 10.3: Feature: #90203 - Make workspace available in TypoScript conditions
- Variable
.workspaceId
- Type
Integer
- Description
id of current workspace
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[workspace.workspaceId == 0]
workspace.isLive¶
New in version 10.3: Feature: #90203 - Make workspace available in TypoScript conditions
- Variable
workspace.isLive
- Type
Boolean
- Description
True if current workspace is live
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[workspace.isLive]
workspace.isOffline¶
New in version 10.3: Feature: #90203 - Make workspace available in TypoScript conditions
- Variable
workspace.isOffline
- Type
Boolean
- Description
True if current workspace is offline
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[workspace.isOffline]
typo3¶
- Variable
typo3
- Type
Object
- Description
object with TYPO3 related information
typo3.version¶
- Variable
typo3.version
- Type
String
- Description
TYPO3_version (e.g. 9.4.0-dev)
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[typo3.version == "9.5.5"]
Functions in all contexts¶
Functions take over the logic of the old conditions which do more than a simple comparison check. The following functions are available in any context:
request¶
- Function
request
- Parameter
Custom
- Description
Allows to fetch information from current request.
request.getQueryParams()¶
- Function
request.getQueryParams()
- Parameter
Custom
- Type
Array
- Description
Allows to access all available GET-Parameters from current request.
Assuming the following query within url:
route=%2Fajax%2Fsystem-information%2Frender&token=5c53e9b715362e7b0c3275848068133b89bbed77&skipSessionUpdate=1
the following array would be provided:
- Key:
route
Value:
/ajax/system-information/render
- Key:
token
Value:
5c53e9b715362e7b0c3275848068133b89bbed77
- Key:
skipSessionUpdate
Value:
1
- Key:
- Example
Check if query parameter skipSessionUpdate equals 1:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[request.getQueryParams()['skipSessionUpdate'] == 1]
Safely check the query parameter array to avoid error logs in case key is not defined (see traverse). This will check if the GET parameter
tx_news_pi1[news]
in the URL is greater than0
:EXT:site_package/Configuration/TypoScript/setup.typoscript¶[traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]
request.getParsedBody()¶
- Function
request.getParsedBody()
- Parameter
Custom
- Type
Array
- Description
Provides all values contained in the request body, e.g. in case of submitted form via POST, the submitted values.
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[request.getParsedBody()['foo'] == 1]
request.getHeaders()¶
- Function
request.getHeaders()
- Parameter
Custom
- Type
Array
- Description
Provides all values from request headers.
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[request.getHeaders()['Accept'] == 'json'] page.10.value = Accepts json [END] [request.getHeaders()['host'][0] == 'www.example.org'] page.20.value = The host is www.example.org [END]
request.getCookieParams()¶
- Function
request.getCookieParams()
- Parameter
Custom
- Type
Array
- Description
Provides all available cookies.
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[request.getCookieParams()['foo'] == 1]
request.getNormalizedParams()¶
- Function
request.getNormalizedParams()
- Parameter
Custom
- Type
Array
- Description
- Provides access to NormalizedParams object which contains a bunch of methods:
getHttpHost()
Example:
www.example.org
isHttps()
Returns boolean whether SSL was used.
getRequestHost()
Example:
www.example.org
getRequestHostOnly()
Example:
www.example.org
getRequestPort()
Returns the port, mostly
80
or443
, but can be whatever is configured.getScriptName()
Example:
/typo3/index.php
getRequestUri()
Example:
/typo3/index.php?route=%2Fajax%2Fsystem-information%2Frender
getRequestUrl()
Example:
https://example.org/typo3/index.php?route=%2Fajax%2Fsystem-information%2Frender
getRequestScript()
Example:
https://example.org/typo3/index.php
getRequestDir()
Example:
https://example.org/typo3/
isBehindReverseProxy()
Returns boolean.
getRemoteAddress()
IP Adress of client, in case of docker this could be
172.18.0.6
.getScriptFileName()
Example:
/var/www/html/public/typo3/index.php
getDocumentRoot()
Example:
/var/www/html/public
getSiteUrl()
Example:
example.org
getSitePath()
Example:
/
getSiteScript()
Example:
typo3/index.php?route=%2Fajax%2Fsystem-information%2Frender
getPathInfo()
Ist bei mir leer gewesen
getHttpReferer()
If enabled, delivers the prior visited url, e.g.
example.org/typo3/index.php
getHttpUserAgent()
Example:
Mozilla/5.0 (X11; Linux x86_64) Chrome/73.0.3683.86 Safari/537.36
getHttpAcceptEncoding()
Example:
gzip, deflate
getHttpAcceptLanguage()
Example:
de-DE,de;q=0.9
getRemoteHost()
Name of client pc.
getQueryString()
Example:
route=%2Fajax%2Fsystem-information%2Frender
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[request.getNormalizedParams().isHttps()] page.10.value = HTTPS is being used [END] [request.getNormalizedParams().getHttpHost() == "example.org"] page.10.value = The host is "example.org" [END]
request.getPageArguments()¶
- Function
request.getPageArguments()
- Parameter
None
- Type
Array
- Description
Get current
PageArguments
object with resolved route parts from enhancers.- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[request.getPageArguments().get('foo_id') > 0]
Allows migration from old condition syntax using
[globalVar = GP:singlepartner > 0]
to[request.getPageArguments().get('singlepartner') > 0]
.
date¶
- Function
date
- Parameter
String
- Type
String / Integer
- Description
Get current date in given format.
See PHP date function as reference for possible usage.
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[date("j") == 7] page.10.value = True if day of current month is 7 [END] [date("w") == 7] page.10.value = True if day of current week is [END] [date("z") == 7] page.10.value = True if day of current year is 7 [END] [date("G") == 7] page.10.value = True if current hour is 7 [END]
like¶
- Function
like
- Parameter
String, String
- Type
Boolean
- Description
This function has two parameters:
- The first parameter
Is the string to search in
- The second parameter
Is the search string
- Example
Search a string with
*
within another string:EXT:site_package/Configuration/TypoScript/setup.typoscript¶[like("fooBarBaz", "*Bar*")]
Search string with single characters in between, using
?
:EXT:site_package/Configuration/TypoScript/setup.typoscript¶[like("fooBarBaz", "f?oBa?Baz")]
Search string using regular expression:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[like("fooBarBaz", "/f[o]{2,2}[aBrz]+/")]
traverse¶
- Function
traverse
- Parameter
Array, String
- Type
Custom
- Description
This function gets a value from an array with arbitrary depth. It has two parameters:
- The first parameter
Is the array to traverse
- The second parameter
Is the path to traverse
In case the path is not found in the array, an empty string is returned.
- Example
Traverse query parameters of current request along
tx_news_pi1[news]
:EXT:site_package/Configuration/TypoScript/setup.typoscript¶[traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]
ip¶
- Function
ip
- Parameter
String
- Type
Boolean
- Description
Value or Constraint, Wildcard or RegExp possible special value: devIP (match the devIPMask).
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[ip("172.18.*")] page.10.value = Your IP matches "172.18.*" [END] [ip("devIP")] page.10.value = Your IP matches the configured devIp [END]
compatVersion¶
- Function
compatVersion
- Parameter
String
- Type
Boolean
- Description
Compares against the current TYPO3 branch.
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[compatVersion("11.5")] page.10.value = You are using TYPO3 v11.5 [END]
Is same as:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[compatVersion("11.5.0")] page.10.value = You are using TYPO3 v11.5 [END]
Another example:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[compatVersion("11.5.1")] page.10.value = You are using TYPO3 v11.5 [END]
loginUser¶
Note
This method is deprecated in TYPO3 v12.4. The transition can be done in existing TYPO3 v11 projects already. You should use either frontend.user to test for frontend user state (available in frontend TypoScript), or backend.user (available in frontend TypoScript and TSconfig).
- Function
loginUser
- Parameter
String
- Type
Boolean
- Description
value or constraint, wildcard or RegExp possible
Context dependent, uses BE-User within TSconfig, and FE-User within TypoScript.
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[loginUser('*')] # matches any login user page.10.value = You are logged in! [END] [loginUser(1)] page.10.value = Your frontend user has the uid 1 [END] [loginUser('1,3,5')] page.10.value = Your frontend user has the uid 1, 3 or 5 [END] [loginUser('*') == false] page.10.value = You are logged out! [END]
getTSFE¶
- Function
getTSFE
- Parameter
Object
- Description
Provides access to TypoScriptFrontendController (
$GLOBALS['TSFE']
)Conditions based on
getTSFE()
used in a context where TSFE is not available will always evaluate tofalse
.- Example
Current typeNum:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[getTSFE().type == 98]
Current page id equals to 17. However, page should be preferred:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[getTSFE().id == 17]
feature¶
- Function
feature
- Parameter
String
- Description
Provides access to feature toggles current state.
- Example
Check if feature toggle for strict TypoScript syntax is enabled:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[feature("TypoScript.strictSyntax") === false]
usergroup¶
Note
This method is deprecated in TYPO3 v12.4. The transition can be done in existing TYPO3 v11 projects already. You should use either frontend.user to test for frontend user state (available in frontend TypoScript), or backend.user (available in frontend TypoScript and TSconfig).
- Function
usergroup
- Parameter
String
- Value
Boolean
- Description
Value or constraint, wildcard or RegExp possible
Allows to check whether current user (FE or BE) is part of the expected usergroup.
- Example
Any usergroup:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[usergroup("*")] page.10.value = You are logged in and belong to some usergroup. [END] [usergroup("12")] page.10.value = You are in the usergroup with uid 12. [END] [usergroup("12,15,18")] page.10.value = You are in the usergroup with uid 12, 15 or 18. [END]
Functions in frontend context¶
The following functions are only available in frontend context:
session¶
- Function
session
- Parameter
String
- Value
Mixed
- Description
Allows to access values of the current session. Available values depend on values written to the session, e.g. by extensions.
Use
|
to dig deeper into the structure for stored values.- Example
Example, matches if session has value 1234567 in structure
$foo['bar']
:EXT:site_package/Configuration/TypoScript/setup.typoscript¶[session("foo|bar") == 1234567]
site¶
- Function
site
- Parameter
String
- Description
Get value from site configuration, or null if no site was found or property does not exists.
Available Information:
- site("identifier")
Returns the identifier of current site as string.
- site("base")
Returns the base of current site as string.
- site("rootPageId")
Returns the root page uid of current site as integer.
- site("languages")
Returns array of available languages for current site. For deeper information, see siteLanguage.
- site("allLanguages")
Returns array of available and unavailable languages for current site. For deeper information, see siteLanguage.
- site("defaultLanguage")
Returns the default language for current site. For deeper information, see siteLanguage.
- site("configuration")
Returns an array with all available configuration for current site.
- Example
Site identifier:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[site("identifier") == "typo395"]
Matches if site base host:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[site("base").getHost() == "www.example.org"]
Base path:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[site("base").getPath() == "/"]
Rootpage uid:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[site("rootPageId") == 1]
Configuration property:
EXT:site_package/Configuration/TypoScript/setup.typoscript¶[traverse(site("configuration"), "myCustomProperty") == true]
Warning
It might seem straight-forward to use site("configuration")["myCustomProperty"]
to access
configuration properties. However, if the property has not been set, this will trigger a runtime
exception, and your log will fill up quickly. Using traverse will silence the error messages.
siteLanguage¶
- Function
siteLanguage
- Parameter
String
- Value
Mixed
- Description
Get value from siteLanguage configuration, or null if no site was found or property not exists.
Available information:
siteLanguage("languageId")
siteLanguage("locale")
siteLanguage("base")
siteLanguage("title")
siteLanguage("navigationTitle")
siteLanguage("flagIdentifier")
siteLanguage("typo3Language")
: default or 2 letter language codesiteLanguage("twoLetterIsoCode")
: 2 letter language codesiteLanguage("hreflang")
siteLanguage("direction")
siteLanguage("fallbackType")
siteLanguage("fallbackLanguageIds")
- Example
- EXT:site_package/Configuration/TypoScript/setup.typoscript¶
[siteLanguage("locale") == "de_CH"] page.10.value = This site has the locale "de_CH" [END] [siteLanguage("title") == "Italy"] page.10.value = This site has the title "Italy" [END]