Attention
TYPO3 v11 has reached end-of-life as of October 31th 2024 and is no longer being maintained. Use the version switcher on the top left of this page to select documentation for a supported version of TYPO3.
Need more time before upgrading? You can purchase Extended Long Term Support (ELTS) for TYPO3 v10 here: TYPO3 ELTS.
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.
applicationContext
applicationContext
-
- Type
- String
The current application context as a string. See Application context.
Example:
[applicationContext == "Development"]
Copied!Any context that is "Production" or starts with "Production" (eg Production/Staging").
[applicationContext matches "/^Production/"]
Copied!
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()
page
-
- Type
- Array
All data of the current page record as array.
Example:
# 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"]
Copied!
Constant
{$foo.bar}
-
- Type
- Constant
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 [{$foo.bar} == 4711] # If constant is a string, put constant in quotes ["{$foo.bar}" == "4711"]
Copied!
tree
tree
-
- Type
- Object
Object with tree information.
tree.level
tree.level
-
- Type
- Integer
The current tree level.
Example:
[tree.level == 0]
Copied!
tree.pagelayout
New in version 11.0
tree.pagelayout
-
- Type
- Integer / String
Check for the defined backend layout of a page, including the inheritance of the field
Backend Layout
.(subpages of this page) Example:
# 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]
Copied!
tree.rootLine
tree.rootLine
-
- Type
- Array
Array of arrays with UID and PID.
Example:
[tree.rootLine[0]["uid"] == 1]
Copied!
tree.rootLineIds
tree.rootLineIds
-
- Type
- Array
An array with UIDs of the root line.
Example:
[2 in tree.rootLineIds]
Copied!
tree.rootLineParentIds
New in version 10.3
This implements the old PIDupin
condition within the
Symfony expression language, see
Feature: #88962 - Re-implement old PIDupinRootline TypoScript condition
tree.rootLineParentIds
-
- Type
- Array
An array with parent UIDs of the root line.
Example:
[2 in tree.rootLineParentIds]
Copied!
backend
backend
-
- Type
- Object
Object with backend information.
backend.user
backend.user
-
- Type
- Object
Object with current backend user information.
backend.user.isAdmin
backend.user.isAdmin
-
- Type
- Boolean
True, if the current backend user is administrator.
Example:
[backend.user.isAdmin]
Copied!
backend.user.isLoggedIn
backend.user.isLoggedIn
-
- Type
- Boolean
True, if the current backend user is logged in.
Example:
[backend.user.isLoggedIn]
Copied!
backend.user.userId
backend.user.userId
-
- Type
- Integer
UID of the the current backend user.
Example:
[backend.user.userId == 5]
Copied!
backend.user.userGroupIds
backend.user.userGroupIds
-
- Type
- Array
- Context
- Frontend, backend
Array of user group IDs assigned to the current backend user.
Example:
[2 in backend.user.userGroupIds]
Copied!
backend.user.userGroupList
New in version 11.2
Starting with TYPO3 v11.2 backend.
,
an array, has been added. Use this instead of like
expressions to test for the user group of the current
backend user.
backend.user.userGroupList
-
- Type
- String
Comma-separated list of group UIDs.
Example:
[like(","~backend.user.userGroupList~",", "*,1,*")]
Copied!
frontend
frontend
-
- Type
- Object
Object with frontend information.
frontend.user
frontend.user
-
- Type
- Object
Object with current frontend user information.
frontend.user.isLoggedIn
frontend.user.isLoggedIn
-
- Type
- Boolean
True, if the current frontend user is logged in.
Example:
[frontend.user.isLoggedIn]
Copied!
frontend.user.userId
frontend.user.userId
-
- Type
- Integer
The UID of the current frontend user.
Example:
[frontend.user.userId == 5]
Copied!
frontend.user.userGroupIds
frontend.user.userGroupIds
-
- Type
- Array
- Context
- Frontend
Array of user group IDs of the current frontend user.
Example:
[4 in frontend.user.userGroupIds]
Copied!
frontend.user.userGroupList
New in version 11.2
Starting with TYPO3 v11.2 frontend.
,
an array has been added. Use this instead of like
expressions to test for the user group of the current
frontend user.
frontend.user.userGroupList
-
- Type
- String
Comma-separated list of group UIDs.
Example:
[like(","~frontend.user.userGroupList~",", "*,1,*")]
Copied!
workspace
New in version 10.3
Feature: #90203 - Make workspace available in TypoScript conditions
workspace
-
- Type
- Object
Object with workspace information.
workspace.workspaceId
New in version 10.3
Feature: #90203 - Make workspace available in TypoScript conditions
workspace.workspaceId
-
- Type
- Integer
UID of the current workspace.
Example:
[workspace.workspaceId == 0]
Copied!
workspace.isLive
New in version 10.3
Feature: #90203 - Make workspace available in TypoScript conditions
workspace.isLive
-
- Type
- Boolean
True, if the current workspace is the live workspace.
Example:
[workspace.isLive]
Copied!
workspace.isOffline
New in version 10.3
Feature: #90203 - Make workspace available in TypoScript conditions
workspace.isOffline
-
- Type
- Boolean
True, if the current workspace is offline.
Example:
[workspace.isOffline]
Copied!
typo3
typo3
-
- Type
- Object
Object with TYPO3-related information.
typo3.version
typo3.version
-
- Type
- String
TYPO3_version (for example, 11.5.33)
Example:
[typo3.version == "11.5.33"]
Copied!
typo3.branch
typo3.branch
-
- Type
- String
TYPO3 branch (for example, 11.5)
Example:
[typo3.branch == "11.5"]
Copied!
typo3.devIpMask
typo3.devIpMask
-
- Type
- String
date()
date()
-
- Parameter
-
String
- type
-
String | Integer
Get the current date in the given format. See the PHP date function as a reference for the possible usage.
Example:
# True, if the day of the current month is 7 [date("j") == 7] # True, if the day of the current week is 7 [date("w") == 7] # True, if the day of the current year is 7 [date("z") == 7] # True, if the current hour is 7 [date("G") == 7]
Copied!
like()
like()
-
- Parameter
-
String, String
- type
-
Boolean
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 [like("fooBarBaz", "*Bar*")] # Search string with single characters in between, using ? [like("fooBarBaz", "f?oBa?Baz")] # Search string using regular expression [like("fooBarBaz", "/f[o]{2,2}[aBrz]+/")]
Copied!
traverse()
traverse()
-
- Parameter
-
Array, String
- type
-
Mixed
This function gets a value from an array with arbitrary depth and suppresses a PHP warning when sub-arrays do not exist. 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] [request && traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]
Copied!Tip
Checking for the request object to be available before using
traverse
may be necessary, for example, when using Extbase repositories in CLI context (as Extbase depends on TypoScript and on the command line is no request object available). This avoids the error() Unable to call method "get
.Query Params" of non- object "request"
compatVersion()
compatVersion()
-
- Parameter
-
String
- type
-
Boolean
Compares against the current TYPO3 branch.
Example:
# True, if the current TYPO3 version is 12.4.x [compatVersion("12.4")] # True, if the current TYPO3 version is 12.4.5 [compatVersion("12.4.5")]
Copied!
getTSFE()
getTSFE()
-
- Type
- Object
Provides access to TypoScriptFrontendController
$GLOBALS
. This function can directly access methods of['TSFE'] Typo
. This class is target of a mid-term refactoring. It should be used with care since it will eventually vanish in the future.Script Frontend Controller Using the
get
function, developers have to ensure that "TSFE" is available before accessing its properties. A missing "TSFE", for example, in backend context, does no longer automatically evaluate the whole condition toTSFE () false
. Instead, the function returnsnull
, which can be checked using[get
.TSFE () && get TSFE (). id == 17] Example:
# True, if the current page UID is 17. Use the page variable instead [getTSFE() && getTSFE().id == 17]
Copied!
getenv()
getenv()
-
- Type
- String
feature()
feature()
-
- Type
- String
Provides access to the current state of feature toggles.
Example:
# True, if the feature toggle for enforcing the Content Security Policy # in the frontend is enabled [feature("security.frontend.enforceContentSecurityPolicy") === true]
Copied!
ip()
ip()
-
- Parameter
-
String
- type
-
Boolean
Value or constraint, wildcard or regular expression possible; special value: "devIP" (matches the devIPmask).
Example:
[ip("172.18.*")] page.10.value = Your IP matches "172.18.*" [END] [ip("devIP")] page.10.value = Your IP matches the configured devIp [END]
Copied!
request
request()
-
- Type
- Mixed
Allows to fetch information from current request.
Tip
Checking for the request object before
using in a condition may be necessary, for example, when using
Extbase repositories in
CLI context (as Extbase
depends on TypoScript and on the command line is no request object
available). This avoids, for example, the error
Unable to call method "get
.
request.getQueryParams()
request.getQueryParams()
-
- Type
- Array
Allows to access 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
Example:
[request && request.getQueryParams()['skipSessionUpdate'] == 1]
Copied!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_
in the URL is greater thannews_ pi1 [news] 0
:[request && traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]
Copied!
request.getParsedBody()
request.getParsedBody()
-
- Type
- Array
Provide all values contained in the request body, for example, in case of submitted form via POST, the submitted values.
Example:
[request && traverse(request.getParsedBody(), 'foo') == 1]
Copied!
request.getHeaders()
request.getHeaders()
-
- Type
- Array
Provide all values from request headers.
Example:
[request && request.getHeaders()['Accept'] == 'json'] page.10.value = Accepts json [END] [request && request.getHeaders()['host'][0] == 'www.example.org'] page.20.value = The host is www.example.org [END]
Copied!
request.getCookieParams()
request.getCookieParams()
-
- Type
- Array
Provides available cookies.
Example:
[request && request.getCookieParams()['foo'] == 1]
Copied!
request.getNormalizedParams()
request.getNormalizedParams()
-
- Type
- Array
Provides access to the
\TYPO3\
object. Have a look at the normalized parameters of the request object for a list of the available methods.CMS\ Core\ Http\ Normalized Params Example:
[request && request.getNormalizedParams().isHttps()] page.10.value = HTTPS is being used [END] [request && request.getNormalizedParams().getHttpHost() == "example.org"] page.10.value = The host is "example.org" [END]
Copied!
request.getPageArguments()
request.getPageArguments()
-
- Type
- Object
Get the current
\TYPO3\
object with the resolved route parts from enhancers.CMS\ Core\ Routing\ Page Arguments Example:
[request && request.getPageArguments().get('foo_id') > 0]
Copied!Allows migration from old condition syntax using
[global
toVar = GP: singlepartner > 0] [request && request.
.get Page Arguments (). get ('singlepartner') > 0]
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).
loginUser
-
- Parameter
-
String
- type
-
Boolean
Value or constraint, wildcard or RegExp possible
Context dependent, uses backend user within TSconfig, and frontend user within TypoScript.
Example:
[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]
Copied!
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).
usergroup
-
- Parameter
-
String
- type
-
Boolean
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 [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]
Copied!
session()
session()
-
- Parameter
-
String
- type
-
Mixed
Allows to access values of the current session. Available values depend on values written to the session, for example, by extensions. Use
|
to dig deeper into the structure for stored values.Example:
[session("foo|bar") == 1234567]
Copied!
site()
site()
-
- Parameter
-
String
- type
-
Mixed
Get a value from the site configuration, or null, if no site was found or the 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
("root Page Id") - 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
("all Languages") - Returns an array of available and unavailable languages for the current site. For deeper information, see siteLanguage().
site
("default Language") - 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") == "typo395"]
Copied!Matches if site base host:
[site("base").getHost() == "www.example.org"]
Copied!Base path:
[site("base").getPath() == "/"]
Copied!Rootpage uid:
[site("rootPageId") == 1]
Copied!Configuration property:
[traverse(site("configuration"), "myCustomProperty") == true]
Copied!
Warning
It might seem straight-forward to use site
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()
siteLanguage()
-
- Parameter
-
String
- type
-
Mixed
Get a value from the site language 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:
[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]
Copied!