21 TypoScript Conditions Cheatsheet

Improve your TYPO3 website's functionality with modern TypoScript conditions! Learn guidelines and examples with this easy-to-use cheat sheet .

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 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

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.

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 = *.t3planet.com]

 

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

 

How to Check the Date Function?

 

// TYPO3 <= 9.3
[dayofweek = 5]

 

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

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.isAdmin]
[backend.user.isLoggedIn]
[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.isLoggedIn]
[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 == "192.168.0.100"]

 

8. workspace - To check TYPO3 Workspace

Object with workspace information.

 

[workspace.workspaceId == 1]
[workspace.isLive]
[workspace..isOffline]

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.getNormalizedParams().isHttps()]
[request.getPageArguments().get('foo_id') > 0]
[request.getNormalizedParams().getHttpHost() == "t3planet.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).’

 

[ip("172.18.*")]
[ip("devIP")]

 

14. compatVersion - To check TYPO3 Compat Version

Version constraint, e.g. 10.4 or 10.4.0.

 

[compatVersion("10.4.0")]

 

15. loginUser - To check Frontend User

Value or constraint, wildcard, or RegExp.

 

[loginUser('*')]
[loginUser("3")]
[loginUser("3,7,9")]
[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") == "t3planet.com"]

 

18. usergroup - To check User Group

Value or constraint, wildcard or RegExp possible.

 

[usergroup("*")]
[usergroup("12")]
[usergroup("12,15,18")]

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() == "t3planet.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"]

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
[GLOBAL]

 

Step 1: Registering new Provider within Extension

 

// Configuration/ExpressionLanguage.php

 

<?php
return [
    'typoscript' => [
        \Vendor\ExtensionName\ExpressionLanguage\CustomTypoScriptConditionProvider::class,
    ]
];

 

Step 2: Implement Provider within Extension

 

// Classes/ExpressionLanguage/CustomTypoScriptConditionProvider.php
<?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
[GLOBAL]
<?php
namespace Vendor\ExtensionName\TypoScript;
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;

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

TypoScript Test Case

 

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

 

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

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!

Your One-Stop Solutions for Custom TYPO3 Development

  • A Decade of TYPO3 Industry Experience
  • 350+ Successful TYPO3 Projects
  • 87% Repeat TYPO3 Customers
TYPO3 Service
service

Post a Comment

×
Captcha Code Can't read the image? Click here to refresh
  • user
    Mathias Gärtner 2023-07-14 at 12:45 pm
    Wow, the 21 TypoScript Conditions Cheatsheet is incredibly comprehensive!
  • user
    Mathias Gärtner 2023-07-14 at 12:44 pm
    Wow, the 21 TypoScript Conditions Cheatsheet is incredibly comprehensive!
  • user
    Daniela Berrios 2023-02-10 at 5:11 am
    Hi t3planet.com admin, You always provide useful links and resources.
  • user
    George 2021-07-07 at 9:14 am
    Nice Article, Very Helpful.!!
  • user
    George 2021-07-07 at 9:09 am
    Very helpful article.!!