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.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 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.getNormalizedParams().isHttps()]
[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).’

 

[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") == "t3terminal.com"]

 

18. usergroup - To check User Group

Value or constraint, wildcard or RegExp possible.

 

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

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

Advanced Example of TypoScript Conditions with Symfony Expression Language

<?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://t3terminal.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]

Wrap-up!

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!

Comments :

  • George July 7, 2021 At 9:14 am
    Nice Article, Very Helpful.!!
  • George July 7, 2021 At 9:09 am
    Very helpful article.!!

Everything About TYPO3 PWA (Progressive Web Application)

Are you thinking and planning to integrate Modern TYPO3 PWA to your TYPO3 website? If yes, then Congratulations! In this article,…

How to Enable TYPO3 HTTPS?

How to Enable TYPO3 HTTPS?

Are you looking for an all-in-one article about TYPO3 + HTTPS? Then, You are at the right place. What & Why HTTPS, How to…

Learn TYPO3 Custom Elements with Core Ways

Learn TYPO3 Custom Elements with Core Ways

In your journey of TYPO3 development, you may get questions like, How should I develop TYPO3 custom elements? Which are available…

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