21 TypoScript Bedingungen Cheatsheet

Moderne TypoScript-Bedingungen ersparen Ihnen Zeit und Mühe. In diesem Artikel finden Sie einfache Richtlinien & Beispiele für TypoScript-Bedingungen mit moderner Symfony-Ausdruckssprache (in Form eines einfachen Spickzettels).

21 TypoScript Bedingungen Cheatsheet

FYI. This blog is translated by machine. Please ignore any spelling and grammar errors; sorry for such inconvenience. We appreciate your understanding and support.

Moderne TypoScript-Bedingungen ersparen Ihnen Zeit und Mühe. In diesem Artikel finden Sie einfache Richtlinien & Beispiele für TypoScript-Bedingungen mit moderner Symfony-Ausdruckssprache (in Form eines einfachen Spickzettels).

Seit TYPO3 v9.4 LTS hat die Community eine neue TypoScript-Bedingung aus der Ausdruckssprachenkomponente von Symfony eingeführt. Als erfahrener Entwickler verstehen Sie die Bedeutung und Leistungsfähigkeit von TypoScript sehr gut. Lassen Sie uns eingehend über alte vs. neue TypoScript-Bedingung, Variablen und Funktionen von TypoScript, Erstellen benutzerdefinierter TypoScript-Bedingung usw. nachdenken.

Nun, Sie haben vielleicht Fragen, Warum wird die Ausdruckssprache Symfony in TYPO3 eingeführt? Meiner Meinung nach ist die Hauptschönheit, die es uns erlaubt, benutzerdefinierte TypoScript-Bedingungen zu erstellen. Lesen Sie weiter, Sie werden erfahren, wie ;)

Wenn Sie ein Anfänger in TYPO3 sind und eine Frage haben: Was ist TypoScript? Ich empfehle die Lektüre eines meiner berühmten Artikel, Myth: TypoScript ist eine Skriptsprache.

TYPO3 + Symfony: Wenn OpenSource zusammenarbeitet!

TYPO3 + Symfony arbeiten zusammen, cool, huh?

Symfony ist ein bekanntes PHP-Framework - ein Satz wiederverwendbarer PHP-Komponenten Entdecken Sie https://symfony.com/ 

Das ist das Schöne an Open-Source-Projekten und der Gemeinschaft! TYPO3 ist wieder einmal der Beweis: Es ist ein freundliches CMS, das gut funktioniert und in andere Open-Source-Projekte integriert werden kann. Sie werden überrascht sein: Wie viele Symfony-Komponenten werden in TYPO3 CMS verwendet? Hier ist die Liste:

  • Konsole
  • AusdruckSprache
  • Finder
  • Polyfill Intl ICU
  • Polyfill Intl IDN
  • Polyfill Mbstring
  • Eigentumszugang
  • PropertyInfo
  • Leitweglenkung
  • YAML

Was ist die Symfony-Ausdruckssprache?

Die Komponente ExpressionLanguage bietet eine Engine, die Ausdrücke kompilieren und auswerten kann. Ein Ausdruck ist ein Einzeiler, der einen Wert zurückgibt (meistens, aber nicht ausschließlich, Booleans). Symfony Expression Language wird von TYPO3 an bestimmten Stellen verwendet. Lesen Sie mehr

 

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

 

TypoScript-Bedingung mit Symfony-Ausdruck einführen

Die Ausdruckssprache Symfony wurde für TypoScript-Bedingungen sowohl im Frontend als auch im Backend implementiert. Die vorhandenen Bedingungen stehen als Variablen und/oder Funktionen zur Verfügung.

Alte vs. Neue TypoScript-Bedingungen

Lassen Sie uns schnell prüfen, was der Unterschied zwischen alten und neuen TypoScript-Bedingungen ist, indem wir die Sprache der Symfony-Ausdrücke verwenden.

Wie überprüft man TypoScript-Bedingungen?

 

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

 


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

 

Welches ist die aktuelle Sprache?

 

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

 

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

 

Überprüfen wir die Parameter der Erweiterung

 

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

 

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

 

Wie kann man TypoScript-Konstanten überprüfen?

 

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

 

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

 

Wie kann man TypoScript-Konstanten überprüfen?

 

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

 

Wie erfährt man die Eigenschaften der aktuellen Seite?

 

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

 

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

 

Wie können Sie die Domainbedingungen überprüfen?

 

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

Welche TypoScript-Bedingungsvariablen sind verfügbar?

TYPO3 bietet eine eingebaute nützliche Variable zum Einchecken von TypoScript-Bedingungen. Schauen wir uns eine nach der anderen mit Beispielen an.

1. applicationContext - Zur Überprüfung der Anwendungsumgebung

Aktueller Anwendungskontext als Zeichenkette.

 

[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. Seite - So prüfen Sie die Seiteneigenschaften

Datensatz der aktuellen Seite als Array.

 

[page ["pid"] == 2]

 

3. {$foo.bar} - So prüfen Sie die TypoScript-Konstante

Jede TypoScript-Konstante ist wie bisher verfügbar. Je nach Typ der Konstante müssen Sie unterschiedliche Bedingungen verwenden, siehe Beispiele unten.

 

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

 

4. Baum - So überprüfen Sie den Seitenbaum

Objekt mit Bauminformationen.

 

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

 

5. backend - So überprüfen Sie Backend-Benutzer

Objekt mit Backend-Informationen (nur im Backend verfügbar).

 

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

 

6. frontend - So prüfen Sie Frontend-Benutzer

Objekt mit Frontend-Informationen (nur im Frontend verfügbar).

 

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

 

7. typo3 - Um die TYPO3-Umgebung zu überprüfen

Objekt mit TYPO3-bezogenen Informationen.

 

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

 

8. Arbeitsbereich - So überprüfen Sie den TYPO3-Arbeitsbereich

Objekt mit Informationen zum Arbeitsbereich.

 

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

Funktionen für Backend und Frontend

Funktionen übernehmen die Logik der alten Bedingungen, die mehr tun als eine einfache Vergleichsprüfung.

9. request - Um Request Params zu überprüfen

Zum Prüfen von Anforderungsparametern mit vielen Funktionen.

 

[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 - So überprüfen Sie die Datumsbedingung

Ermittelt das aktuelle Datum im angegebenen Format.

 

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

 

11. like - Gefällt die Suche in String

Diese Funktion hat zwei Parameter: der erste Parameter ist die zu suchende Zeichenfolge, der zweite Parameter ist die Suchzeichenfolge.

 

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 - So prüfen Sie Verlegung in String

 

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

 

13. ip - So überprüfen Sie die IP-Adresse

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

 

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

 

14. compatVersion - So überprüfen Sie die TYPO3-Kompatibilitätsversion

Version constraint, e.g. 10.4 or 10.4.0.

 

[compatVersion("10.4.0")]

 

15. loginUser - So prüfen Sie Frontend-Benutzer

Value or constraint, wildcard, or RegExp.

 

[loginUser('*')]
[loginUser("3")]
[loginUser("3,7,9")]
[loginUser("*") == false]

 

16. getTSFE - So überprüfen Sie die TSFE-Variable

Bedingungen, die auf getTSFE() basieren und in einem Kontext verwendet werden, in dem TSFE nicht verfügbar ist, werden immer als falsch bewertet.

 

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

 

17. getenv - So überprüfen Sie die ENV-PHP-Funktion

PHP-Umgebung prüfen.

 

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

 

18. usergroup - To check User Group

Wert oder Beschränkung, Wildcard oder RegExp möglich.

 

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

Funktionen nur für Frontend

19. Sitzung - So überprüfen Sie die TYPO3-Sitzung

Wert aus der Sitzung abrufen.

 

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

 

20. site - Zur Überprüfung der Site-Konfiguration

Rufen Sie den Wert aus der Website-Konfiguration ab, oder null, wenn keine Website gefunden wurde oder die Eigenschaft nicht existiert.

 

[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 - Zur Überprüfung der Sprache

Holen Sie den Wert aus der Konfiguration siteLanguage, oder null, wenn keine Site gefunden wurde oder die Eigenschaft nicht existiert.

 

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

Wie erstellt man benutzerdefinierte TypoScript-Bedingungen mit Symfony Expression Language?

Meine Lieblingsfunktion von TypoScript-Bedingungen mit der Symfony-Ausdruckssprache ist die "Erstellung benutzerdefinierter Bedingungen mit unbegrenzter Erweiterbarkeit". Und, Es ist sehr einfach, Ihre eigene TypoScript-Bedingung zu erstellen, Lassen Sie uns das jetzt überprüfen!

 

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

 

Schritt 1: Registrierung eines neuen Providers innerhalb der Erweiterung

 

// Configuration/ExpressionLanguage.php

 

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

 

Schritt 2: Provider innerhalb der Erweiterung implementieren

 

// 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',
        ];
    }
}

 

Schritt 3. Verwendung in TypoScript-Bedingungen

 

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

Fortgeschrittenes Beispiel für TypoScript-Bedingungen mit 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://t3planet.com/endpoint/'
                . $endpoint
                .  '/'
                . $uid
            );
        });
    }
}

TypoScript-Testfall

 

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

Einpacken!

Danke für die Lektüre des Artikels, ich hoffe, Sie haben die neuen TypoScript-Bedingungen genossen und gut erkundet.

  • Bestes Verfahren beibehalten durch Verwendung brandneuer TypoScript-Bedingungen mit Symfony Expression Language.
  • Merken Sie daran, alte TypoScript-Bedingungen auf neue zu migrieren, was Ihre TYPO3-Sites aufwertet.
  • Lesen Sie die Dokumentation weiter, um sich über alle neuen TypoScript-Bedingungen zu informieren.
  • Keep feeling the power and beauty of OpenSource projects and community = TYPO3 + Symfony <3

Was ist Ihre Meinung zu TypoScript-Bedingungen mit Symfony-Ausdruckssprache? Oder: Stehen Sie vor irgendwelchen Problemen? Ich würde gerne Ihre Meinung zum Kommentarfeld erfahren.

Haben Sie ein glückliches TypoScript!

Your One Stop Solutions for Custom TYPO3 Development

  • A Decade of TYPO3 Industry Experience
  • 250+ Successful TYPO3 Projects
  • 87% Repeat TYPO3 Customers
Get Your Free Quote

Post a Comment

×
  • user
    Mathias Gärtner 2023-07-14 um 12:45 pm
    Wow, the 21 TypoScript Conditions Cheatsheet is incredibly comprehensive!