21 TypoScript Conditions Cheatsheet

21 TypoScript Conditions Cheatsheet

Modern TypoScript Conditions will save you time & effort. In this article, You will find easy guidelines & examples of TypoScript conditions with modern Symfony expression language (in the form of an easy cheat sheet).

Since TYPO3 v9.4 LTS, The community introduced a new TypoScript condition from Symfony's expression language component. As an experienced developer, you understand well the importance and power of TypoScript. Let’s explore in-depth about old vs new TypoScript condition, Variables, and Functions of TypoScript, Create custom TypoScript condition, etc.

Well, You may have questions, Why is the Symfony expression language introduced in TYPO3? In my opinion, the main beauty which allows us to create custom TypoScript conditions. Keep reading, you will learn how ;)

If you are a beginner to TYPO3 and have a question: What's TypoScript? I recommend reading one of my famous articles, Myth: TypoScript Is a Scripting Language.

TYPO3 + Symfony: When OpenSource Collaborates Together!

TYPO3 + Symfony collaborate together, cool, huh?

Symfony is a well-known PHP Framework - a set of reusable PHP components Explore https://symfony.com/ 

That’s the beauty of Open Source projects and community! TYPO3 is once again proof, It’s kind CMS which works well and can be integrated with other Open Source projects. You may be surprised, How many Symfony components are used in TYPO3 CMS? Here is the list:

  • Console
  • ExpressionLanguage
  • Finder
  • Polyfill Intl ICU
  • Polyfill Intl IDN
  • Polyfill Mbstring
  • PropertyAccess
  • PropertyInfo
  • Routing
  • YAML

What's Symfony Expression Language?

The ExpressionLanguage component provides an engine that can compile and evaluate expressions. An expression is a one-liner that returns a value (mostly, but not limited to, Booleans). Symfony Expression Language is used by TYPO3 in certain places. Read more


// Symfony Expressions
$expressionLanguage = new \Symfony\Component\ExpressionLanguage\ExpressionLanguage();
$expressionLanguage->evaluate('1 + 2'); // 3
$expressionLanguage->evaluate('1 + 2 === 3'); // true
$expressionLanguage->evaluate('1 + 2 < 3'); // false


Introduce TypoScript Condition with Symfony Expression

The Symfony expression language has been implemented for TypoScript conditions in both frontend and backend. The existing conditions are available as variables and/or functions.

Old vs New TypoScript Conditions

Let’s quickly check what's the difference between old and new TypoScript conditions using the Symfony expressions language.

How to check TypoScript Conditions?


// TYPO3 <= 9.3
[Condition 1] && [Condition 2]


// TYPO3 >= 9.4
[Condition 1 && Condition 2]


Which one is the Current Language?


// TYPO3 <= 9.3
[globalVar = GP:L = 1]


// TYPO3 >= 9.4
[siteLanguage("languageId") == 1]
[siteLanguage("title") == "English"]
[siteLanguage("locale") == "en_US.UTF-8"]


Let’s Check Extension’s Parameters


// TYPO3 <= 9.3
[globalVar = GP:tx_t3terminal_blog|bla > 0]


// TYPO3 >= 9.4
[(request.getQueryParams()['tx_t3terminal_blog'])['bla'] > 0]


What's a Way to Check TypoScript Constants?


// TYPO3 <= 9.3
[globalVar = LIT:1 = {$myConstant}]


// TYPO3 >= 9.4
[{$myConstant} == 1]


How To Check The Current Page?


// TYPO3 <= 9.3
[globalVar = TSFE:id=17, TSFE:id=24]
[globalVar = TSFE:page|pid=17, TSFE:page|pid=24]

// TYPO3 >= 9.4
[page["uid"] == 17]
[page["uid"] in [17,24]]
[getTSFE().id == 17]
[getTSFE().id in [17,24]]


How To Know Current Page Properties?


// TYPO3 <= 9.3
[page|backend_layout = 1]


// TYPO3 >= 9.4
[page["backend_layout"] == 1]


What Way to Check Domain Conditions?


// TYPO3 <= 9.3
[globalString = IENV:HTTP_HOST = *.t3terminal.com]


// TYPO3 >= 9.4
[like(request.getNormalizedParams().getHttpHost(), '*.t3terminal.com')]


How to Check the Date Function?


// TYPO3 <= 9.3
[dayofweek = 5]


// TYPO3 >= 9.4
[date("w") == 5]

Which Are Available TypoScript Conditions Variables?

TYPO3 provides a built-in useful variable to check-in TypoScript conditions. Let’s grab one by one with examples.

1. applicationContext - To check Application Environment

Current application context as a string.


[applicationContext == "Development"]
[applicationContext matches "#^Development#"]
[applicationContext matches "#^Production/Dev#"]
[applicationContext matches "#^Production/(Dev|Staging)#"]
[applicationContext matches "#^Production/Live#"]
[applicationContext == "Production/Live/ClusterServer1"]
[applicationContext matches "#^Production/Live#" && getTSFE().isBackendUserLoggedIn()]
[not (applicationContext matches "#Production#")]


2. page - To check page properties

Current page record as an array.


[page ["pid"] == 2]


3. {$foo.bar} - To check TypoScript Constant

Any TypoScript constant is available like before. Depending on the type of the constant you have to use different conditions, see examples below.


[{$foo.bar} == 4711]
["{$foo.bar}" == "4711"]


4. tree - To check Page Tree

Object with tree information.


[tree.level == 0]
[tree.rootLine [0] ["uid"] == 1]
[2 in tree.rootLineIds]


5. backend - To check Backend User

Object with backend information (available in Backend only).


[backend.user.userId == 5]
[like ("," ~ backend.user.userGroupList ~ ",", "," *, 1, * ")]


6. frontend - To check Frontend User

Object with frontend information (available in Frontend only).


[frontend.user.userId == 5]
[like ("," ~ frontend.user.userGroupList ~ ",", "," *, 1, * ")]


7. typo3 - To check the TYPO3 environment

Object with TYPO3 related information.


[typo3.version == "10.4.2"]
[typo3.branch == "10.4"]
[typo3.devIpMask == ""]


8. workspace - To check TYPO3 Workspace

Object with workspace information.


[workspace.workspaceId == 1]

Functions for Backend and Frontend

Functions take over the logic of the old conditions which do more than a simple comparison check.

9. request - To check Request Params

To check request params with many functions.


[request.getQueryParams()['foo'] == 1]
[request.getParsedBody()['foo'] == 1]
[request.getHeaders()['Accept'] == 'json']
[request.getCookieParams()['foo'] == 1]
[request.getPageArguments().get('foo_id') > 0]
[request.getNormalizedParams().getHttpHost() == "t3terminal.com"]


10. date - To check Date Condition

Get the current date in the given format.


[date("d.m.Y") == "05.04.2019"]
[date("j") == 7]


11. like - To Like Search in String

This function has two parameters: the first parameter is the string to search in the second parameter is the search string.


Syntax: <array-key>[/<array-key>]* 


[like("foobarbaz", "*bar*")]
[like("fooBarBaz", "f?oBa?Baz")]
[like("fooBarBaz", "/f[o]{2,2}[aBrz]+/")]
[like("fooBarBaz", "Bar")]


12. traverse - To check Traverse in String


[traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]


13. ip - To check IP Address

Value or Constraint, Wildcard or RegExp possible special value: devIP (match the devIPMask).’




14. compatVersion - To check TYPO3 Compat Version

Version constraint, e.g. 10.4 or 10.4.0.




15. loginUser - To check Frontend User

Value or constraint, wildcard, or RegExp.


[loginUser("*") == false]


16. getTSFE - To check TSFE Variable

Conditions based on getTSFE() used in a context where TSFE is not available will always evaluate to false.


[getTSFE().page["uid"] == 1]
[getTSFE().fe_user && getTSFE.fe_user.user["username"] == "t3terminal"]
[getTSFE() && getTSFE().isBackendUserLoggedIn()]


17. getenv - To check ENV PHP Function

Check PHP Environment.


[getenv("VIRTUAL_HOST") == "t3terminal.com"]


18. usergroup - To check User Group

Value or constraint, wildcard or RegExp possible.



Functions for Frontend Only

19. session - To check TYPO3 Session

Get value from the session.


[session("session:foo|bar") == 1234567]


20. site - To check Site Configuration

Get value from site configuration, or null if no site was found or property does not exist.


[site("identifier") == "t3terminal"]
[site("base").getHost() == "t3terminal.com"]
[site("base").getPath() == "/"]
[site("rootPageId") == 1]
[site("languages")[0].getDirection() == "ltr"]
[site("configuration")["base"] == "/"]
[site("configuration")["direction"] == "ltr"]
[site("configuration")["enabled"] == true]
[site("configuration")["flag"] == "flags-en-us-gb"]
[site("configuration")["hreflang"] == "en-US"]
[site("configuration")["iso-639-1"] == "en"]
[site("configuration")["languageId"] == "0"]
[site("configuration")["locale"] == "en_US.UTF-8"]
[site("configuration")["navigationTitle"] == "English"]
[site("configuration")["title"] == "English"]
[site("configuration")["typo3Language"] == "default"]


21. siteLanguage - To check Language

Get value from siteLanguage configuration, or null if no site was found or property does not exist.


[siteLanguage("locale") == "de_CH"]
[siteLanguage("title") == "German"]

How to create Custom TypoScript Conditions with Symfony Expression Language?

My favorite feature of TypoScript conditions with Symfony expression language is to “Build custom conditions with unlimited extendibility”. And, It’s very easy to create your own TypoScript condition, Let’s check now!


// TYPO3 <= 9.3
[userFunc = \Vendor\Extension\UserFunc\MyUserFunc('foo')]


// TYPO3 >= 9.4
[variableA === 'valueB']
    page >
    page = PAGE
    page.10 = TEXT
    page.10.value = Matched


Step 1: Registering new Provider within Extension


// Configuration/ExpressionLanguage.php


return [
    'typoscript' => [


Step 2: Implement Provider within Extension


// Classes/ExpressionLanguage/CustomTypoScriptConditionProvider.php
namespace Vendor\ExtensionName\ExpressionLanguage;
use TYPO3\CMS\Core\ExpressionLanguage\AbstractProvider;

class CustomTypoScriptConditionProvider extends AbstractProvider
    public function __construct()
        $this->expressionLanguageVariables = [
            'variableA' => 'valueB',


Step 3. Usage in TypoScript Conditions


[variableA === 'valueB']
    page >
    page = PAGE
    page.10 = TEXT
    page.10.value = Matched

Advanced Example of TypoScript Conditions with Symfony Expression Language

namespace Vendor\ExtensionName\TypoScript;
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;

class CustomConditionFunctionsProvider implements ExpressionFunctionProviderInterface
    public function getFunctions()
        return [
    protected function getWebserviceFunction(): ExpressionFunction
        return new ExpressionFunction('webservice', function () {
            // Not implemented, we only use the evaluator
        }, function ($existingVariables, $endpoint, $uid) {
            return GeneralUtility::getUrl(
                . $endpoint
                .  '/'
                . $uid

TypoScript Test Case


[webservice('pages', 10)]
    page.10 >
    page.10 = TEXT
    page.10.value = Matched


[webservice('pages', 10) === 'Expected title']
    page.10 >
    page.10 = TEXT
    page.10.value = Matched


Thanks for reading the article, I hope you have enjoyed and explored well about new TypoScript conditions.

  • Keep best practice by using brand new TypoScript conditions using Symfony Expression Language.
  • Keep in mind to migrate old TypoScript conditions to new which upgrades your TYPO3 sites.
  • Keep reading documentation to be aware of all new TypoScript conditions.
  • Keep feeling the power and beauty of OpenSource projects and community = TYPO3 + Symfony <3

What’s your opinion on TypoScript conditions with Symfony expression language? Or, Are you facing any issues? I would like to receive your thoughts on the comment box.

Have a Happy TypoScript!

Post Comment

Your email address will not be published. Required fields are marked *


Name is required!

Enter valid name

Valid email is required!

Enter valid email address

Comment is required!

Google Captcha Is Required!

Be the First to Comment
TYPO3 extensions What to know before you build

TYPO3 extensions: What to know before you build them!

TYPO3 comes with a lot of great features out of the box, but sometimes you need to add functionality to your website—-say, a news…

How to Build a TYPO3 website in minutes with TYPO3 SaaS?

How to Build a TYPO3 website in minutes with TYPO3 SaaS?

Introducing TYPO3 SaaS to build a fast, User-friendly SaaS website without worrying about coding, design, and hosting. Everything…

7 Highlights for Administrators in TYPO3 v10

7 Highlights for Administrators in TYPO3 v10: Series 3

Welcome to TYPO3 v10 Features Series!Are you excited and prepared for launching of TYPO3 v10? Oh, You don’t know about that?…

Stay up to date with our recent TYPO3 Blogs, news, & updates