Conditions¶
Frontend TypoScript conditions offer a way to conditionally change TypoScript based on current context. Do not confuse conditions with the "if" function, which is a stdWrap property to act on current data.
See also
Have a look at the TypoScript syntax condition chapter for the basic syntax of conditions.
The Symfony expression language tends to throw warnings when sub-arrays are checked in a condition that do not exist. Use the traverse function to avoid this.
applicationContext¶
-
application
¶Context -
- Type
- String
The current application context as a string. See Application context.
Example:
[applicationContext == "Development"] # ... [END] # Any context that is "Production" or starts with "Production" # (for example, Production/Staging"). [applicationContext matches "/^Production/"] # ... [END]
Copied!
page¶
-
page
¶ -
- Type
- Array
All data of the current page record as array.
Example:
# Check single page UID [traverse(page, "uid") == 2] # ... [END] # Check list of page UIDs [traverse(page, "uid") in [17,24]] # ... [END] # Check list of page UIDs NOT in [traverse(page, "uid") not in [17,24]] # ... [END] # Check range of pages (example: page UID from 10 to 20) [traverse(page, "uid") in 10..20] # ... [END] # Check the page backend layout [traverse(page, "backend_layout") == 5] # ... [END] [traverse(page, "backend_layout") == "example_layout"] # ... [END] # Check the page title [traverse(page, "title") == "foo"] # ... [END]
Copied!
tree¶
-
tree
¶ -
- Type
- Object
Object with tree information.
tree.level¶
-
tree.
¶level -
- Type
- Integer
The current tree level.
Example:
# Check, if the page is on level 0: [tree.level == 0] # ... [END]
Copied!
tree.pagelayout¶
-
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] # ... [END] # Using the TSconfig provider of backend layouts [tree.pagelayout == "pagets__Home"] # ... [END]
Copied!
tree.rootLine¶
-
tree.
¶root Line -
- Type
- Array
Array of arrays with UID and PID.
Example:
[tree.rootLine[0]["uid"] == 1] # ... [END]
Copied!
tree.rootLineIds¶
-
tree.
¶root Line Ids -
- Type
- Array
An array with UIDs of the root line.
Example:
# Check, if page with uid 2 is inside the root line [2 in tree.rootLineIds] # ... [END]
Copied!
tree.rootLineParentIds¶
-
tree.
¶root Line Parent Ids -
- Type
- Array
An array with parent UIDs of the root line.
Example:
# Check, if the page with UID 2 is the parent of a page inside the root line [2 in tree.rootLineParentIds] # ... [END]
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. is Admin -
- Type
- Boolean
True, if the current backend user is administrator.
Example:
# Evaluates to true, if the current backend user is administrator [backend.user.isAdmin] # ... [END]
Copied!
backend.user.isLoggedIn¶
-
backend.
¶user. is Logged In -
- Type
- Boolean
True, if the current backend user is logged in.
Example:
# Evaluates to true, if a backend user is logged in [backend.user.isLoggedIn] # ... [END]
Copied!
backend.user.userId¶
-
backend.
¶user. user Id -
- Type
- Integer
UID of the the current backend user.
Example:
# Evaluates to true, if the user UID of the current logged-in backend # user is equal to 5 [backend.user.userId == 5] # ... [END]
Copied!
backend.user.userGroupIds¶
-
backend.
¶user. user Group Ids -
- Type
- Array
- Context
- Frontend, backend
Array of user group IDs assigned to the current backend user.
Example:
[2 in backend.user.userGroupIds] # ... [END]
Copied!
backend.user.userGroupList¶
-
backend.
¶user. user Group List -
- Type
- String
Comma-separated list of group UIDs.
Example:
[like(","~backend.user.userGroupList~",", "*,1,*")] # ... [END]
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. is Logged In -
- Type
- Boolean
True, if the current frontend user is logged in.
Example:
[frontend.user.isLoggedIn] # ... [END]
Copied!
frontend.user.userId¶
-
frontend.
¶user. user Id -
- Type
- Integer
The UID of the current frontend user.
Example:
[frontend.user.userId == 5] # ... [END]
Copied!
frontend.user.userGroupIds¶
-
frontend.
¶user. user Group Ids -
- Type
- Array
- Context
- Frontend
Array of user group IDs of the current frontend user.
Example:
[4 in frontend.user.userGroupIds] # ... [END]
Copied!
frontend.user.userGroupList¶
-
frontend.
¶user. user Group List -
- Type
- String
Comma-separated list of group UIDs.
Example:
[like(","~frontend.user.userGroupList~",", "*,1,*")] # ... [END]
Copied!
workspace¶
workspace.workspaceId¶
-
workspace.
¶workspace Id -
- Type
- Integer
UID of the current workspace.
Example:
# Check, if in live workspace [workspace.workspaceId == 0] # ... [END]
Copied!
workspace.isLive¶
-
workspace.
¶is Live -
- Type
- Boolean
True, if the current workspace is the live workspace.
Example:
[workspace.isLive] # ... [END]
Copied!
workspace.isOffline¶
-
workspace.
¶is Offline -
- Type
- Boolean
True, if the current workspace is offline.
Example:
[workspace.isOffline] # ... [END]
Copied!
typo3¶
-
typo3
¶ -
- Type
- Object
Object with TYPO3-related information.
typo3.version¶
-
typo3.
¶version -
- Type
- String
TYPO3_version (for example, 12.4.5)
Example:
[typo3.version == "12.4.5"] # ... [END]
Copied!
typo3.branch¶
-
typo3.
¶branch -
- Type
- String
TYPO3 branch (for example, 12.4)
Example:
[typo3.branch == "12.4"] # ... [END]
Copied!
typo3.devIpMask¶
-
typo3.
¶dev Ip Mask -
- Type
- String
$GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask']
Example:
[typo3.devIpMask == "172.18.0.6"] # ... [END]
Copied!
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] # ... [END] # True, if the day of the current week is 7 [date("w") == 7] # ... [END] # True, if the day of the current year is 7 [date("z") == 7] # ... [END] # True, if the current hour is 7 [date("G") == 7] # ... [END]
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*")] # ... [END] # Search string with single characters in between, using ? [like("fooBarBaz", "f?oBa?Baz")] # ... [END] # Search string using regular expression [like("fooBarBaz", "/f[o]{2,2}[aBrz]+/")] # ... [END]
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()¶
-
compat
¶Version () -
- Parameter
-
String
- type
-
Boolean
Compares against the current TYPO3 branch.
Example:
# True, if the current TYPO3 version is 12.4.x [compatVersion("12.4")] # ... [END] # True, if the current TYPO3 version is 12.4.5 [compatVersion("12.4.5")] # ... [END]
Copied!
getTSFE()¶
-
get
¶TSFE () -
- 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 either[get
or the null-safe operatorTSFE () && get TSFE (). id == 17] [get
.TSFE ()?. id == 17] Example:
# True, if the current page UID is 17. Use the page variable instead [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] # ... [END]
Copied!
ip()¶
Changed in version 13.0
This function is only available in TypoScript frontend context. For migration hints see the changelog.
-
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()¶
Deprecated since version 12.3
Using this function in page TSconfig or user TSconfig conditions is deprecated. Such conditions will stop working with TYPO3 v13 and will then always evaluate to false. For migration hints see the changelog.
-
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.
¶get Query Params () -
- 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
then the following array would be provided:
- Key:
route
- Value:
/ajax/system-information/render
- Key:
token
- Value:
5c53e9b715362e7b0c3275848068133b89bbed77
- Key:
skipSessionUpdate
- Value:
1
Example:
# Safely check the query parameter array to avoid error logs in case key # is not defined. This will check if the GET parameter # tx_news_pi1[news] in the URL is greater than 0: [request && traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0] # ... [END]
Copied!
request.getParsedBody()¶
-
request.
¶get Parsed Body () -
- 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] # ... [END]
Copied!
request.getHeaders()¶
-
request.
¶get Headers () -
- 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()¶
-
- Type
- Array
Provides available cookies.
Example:
[request && request.getCookieParams()['foo'] == 1] # ... [END]
Copied!
request.getNormalizedParams()¶
-
request.
¶get Normalized Params () -
- 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.
¶get Page Arguments () -
- 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] # ... [END] # True, if current page type is 98 [request && request.getPageArguments()?.getPageType() == 98] # ... [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:
# Match, if the session has the value 1234567 in the structure :php:`$foo['bar']`: [session("foo|bar") == 1234567] # ... [END]
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 the current site as a string.
site
("base") - Returns the base of the current site as a string.
site
("root Page Id") - Returns the root page UID of the current site as an integer.
site
("languages") - Returns an array of the available languages for the 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 the current site. For deeper information, see siteLanguage().
site
("configuration") - Returns an array with the available configuration for the current site.
Example:
# Site identifier [site("identifier") == "my_site"] # ... [END] # Match site base host [site("base").getHost() == "www.example.org"] # ... [END] # Match base path [site("base").getPath() == "/"] # ... [END] # Match root page UID [site("rootPageId") == 1] # ... [END] # Match a configuration property [traverse(site("configuration"), "myCustomProperty") == true] # ... [END]
Copied!Site settings can also be used in the conditions in TypoScript constants:
my.constant = my global value [traverse(site('configuration'), 'settings/some/setting') == 'someValue'] my.constant = another value, if condition matches [global]
Copied!
siteLanguage()¶
-
site
¶Language () -
- 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:
site
Language ("language Id") - Returns the language ID as an integer.
site
Language ("locale") - Returns the current locale as a string, for example
en_
orGB de_
.DE site
Language ("base") - Returns the configured base URL as a string.
site
Language ("title") - Returns the internal human-readable name for this language as a string.
site
Language ("navigation Title") - Returns the navigation title as a string.
site
Language ("flag Identifier") - Returns the flag identifier as a string, for example
gb
. site
Language ("typo3Language") - Returns the language identifier used in TYPO3
XLIFF files as a string, for example
default
or the two-letter language code. site
Language ("hreflang") Changed in version 12.4
This option is not relevant anymore for regular websites without rendering hreflang tag, but is now customizable, and has a proper fallback.
Returns the language information for the hreflang tag as a string.
site
Language ("fallback Type") - Returns the language fallback mode as a string, one of
fallback
,strict
orfree
. site
Language ("fallback Language Ids") - Returns the list of fallback languages as a string, for example
1,0
.
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!
loginUser()¶
Changed in version 13.0
This function has been removed. Use the variables frontend.user and backend.user instead. For migration hints see the changelog.
usergroup()¶
Changed in version 13.0
This function has been removed. Use the variables frontend.user and backend.user instead. For migration hints see the changelog.
Examples¶
Check if a constant is set to a certain value¶
TypoScript constants can be used in conditions with the Syntax for conditions:
[{$tx_my_extension.settings.feature1Enabled} == 1]
page.10.value = The feature 1 of my_extension is enabled.
[ELSE]
page.10.value = The feature 1 of my_extension is not enabled.
[END]
Note
TypoScript constants can be used in frontend TypoScript setup conditions, but not in Frontend TypoScript constants conditions. At the time of evaluation the constants are not yet available in constants conditions.
It is, however, possible to use site settings in constant conditions.
Compare constant with strict types¶
All constants are by default string. But as constants were replaced
before expression check, numeric values will interpreted as integer if they
were not wrapped into quotes. This may lead to miss-understanding while using
strict type comparison ===
in expressions. See following examples:
Without using strict type comparison following two examples are true if constant is set to 1:
[{$tx_my_extension.settings.feature1Enabled} == 1]
page.10.value = The feature 1 of my_extension is enabled.
[END]
[{$tx_my_extension.settings.feature1Enabled} == "1"]
page.10.value = The feature 1 of my_extension is enabled.
[END]
In case of using strict type comparison only the next upper example is true. That's because the stored number of the constant was not wrapped with quotes and was therefor interpreted as integer.
[{$tx_my_extension.settings.feature1Enabled} === 1]
page.10.value = The feature 1 of my_extension is enabled.
[END]
[{$tx_my_extension.settings.feature1Enabled} === "1"]
page.10.value = The feature 1 of my_extension is enabled.
[END]
Compare constant against strings¶
All constants are by default string. As they are replaced with their contained value before expression check, you have to wrap them into quotes to prevent interpreting the values as integer or float.
Following condition is always false:
[{$tx_my_extension.settings.feature1Enabled} == "active"]
page.10.value = The feature 1 of my_extension is enabled.
[END]
If you are working with strings in conditions please do it that way:
["{$tx_my_extension.settings.feature1Enabled}" == "active"]
page.10.value = The feature 1 of my_extension is enabled.
[END]
Sure, strict type string comparisons are also working:
["{$tx_my_extension.settings.feature1Enabled}" === "active"]
page.10.value = The feature 1 of my_extension is enabled.
[END]
Use constants with reserved keywords¶
As explained, above constants were replaced with their values before they are
processed by expression language. That allows experimental structures: If
{$foo}
is set to the reserved page array
and page title is Home
following condition is true:
[traverse({$foo}, "title") == "Home"]
page.10.value (
Value will be shown if constant is "page" and page title is "Home"
)
[END]
After the replacement of the constant the example will result into:
[traverse(page, "title") == "Home"]
page.10.value (
Value will be shown if constant is "page" and page title is "Home"
)
[END]