TypoScript Bedingungen mit der Symfony Expression Language

Wussten Sie, dass mit TYPO3 v9.5 LTS die Symfony-Ausdruckssprache in TypoScript-Bedingungen eingeführt wurde? Ja!!! TypoScript ist das freundliche Herz von TYPO3, das durch Erweiterungen der beliebtesten Symfony-Expression immer mächtiger wird.

TypoScript Bedingungen mit der Symfony Expression Language

Wussten Sie, dass mit TYPO3 v9.5 LTS die Symfony-Ausdruckssprache in TypoScript-Bedingungen eingeführt wurde? Ja!!! TypoScript ist das freundliche Herz von TYPO3, das durch Erweiterungen der beliebtesten Symfony-Expression immer mächtiger wird.

Hier möchte ich zeigen, wie alte TypoScript-Bedingungen in die brandneue Symfony-Ausdruckssprache migriert werden.

Willkommen! Unterstützen Sie TYPO3, indem Sie mein Patreon werden

Einen Moment der Aufmerksamkeit, bitte.

Da ich TYPO3 liebe, möchte ich TYPO3-Nutzer mit informativen Inhalten, Tutorials und Erfahrungen versorgen, indem ich regelmäßig TYPO3-Blogs schreibe, "um der Community etwas zurückzugeben".

Um unsere außergewöhnlichen OpenSource TYPO3 Projekte und das Netzwerk weiter zu unterstützen.

Menschen zum Spenden inspirieren :)

Wenn sich zwei große OpenSource treffen!

TYPO3 + Symfony arbeiten zusammen, cool, oder?

Symfony ist ein Set von wiederverwendbaren PHP-Komponenten... und PHP ist ein Framework für Webprojekte~ https://symfony.com/ 

Das ist das Schöne an Open Source Projekten und der Community! TYPO3 ist wieder einmal der Beweis, Es ist eine Art CMS, das gut funktioniert und mit anderen Open Source Projekten integriert werden kann. Der TYPO3-Kern arbeitet hart an der Verwendung von Symfony-Komponenten, um die Basis der TYPO3 CMS-Lösung weiter zu verbessern.

Ich denke, Sie haben schon einige der Begriffe wie YAML, Routing, Console, etc. gehört, die aus dem Symfony Framework stammen. Sie werden vielleicht überrascht sein, wie viele Symfony-Komponenten in TYPO3 CMS verwendet werden? Hier ist die Liste:

Wie aktuell sind die TypoScript-Bedingungen?

TYPO3-Neulinge sind manchmal etwas ängstlich und finden es schwierig, mit TypoScript umzugehen. Aber wenn Sie einmal die Schönheit von TypoScript verstanden haben, dann werden Sie es definitiv lieben.

TypoScript ist keine Skriptsprache, sondern dient eher als eine Art API (Schnittstelle) zur Konfiguration des zugrunde liegenden PHP-Codes.

Hier ist also die Syntax, wie TypoScript-Bedingungen derzeit verwendet werden:

// TypoScript Code
[condition 1] [condition 2]
// True, Write your code here
[end]

Mit Hilfe von TypoScript-Bedingungen haben Sie die Möglichkeit, Ihre TYPO3-Templates, Layouts, Inhaltselemente, etc. zu steuern,

Einführung der brandneuen Symfony Expression Language

Die Expression Language bietet eine Engine, die Ausdrücke kompiliert und auswertet. Ein Ausdruck ist ein Einzeiler, der einen Wert zurückgibt. Meistens ist sein Wert vom Typ Boolean, entweder wahr oder falsch.

Wie sieht es innerhalb von Symfony aus?

$symfonyExpressionLanguage>evaluate('1 < 2');
// return true

$symfonyExpressionLanguage>evaluate('not ("Search" matches "/Replace/")'); 
// return true

$symfonyExpressionLanguage>evaluate('11 in 1..10');
// return true

$symfonyExpressionLanguage>evaluate('calendar.getWeekday() == "Monday"'));
// return true on monday, otherwise wrong

Weitere ausführliche Beispiele und Dokumentationen können Sie unter 
https://symfony.com/doc/current/components/expression_language/syntax.html

Neue TypoScript-Bedingungen von TYPO3 9 LTS

Die Symfony Expression Language ist ab TYPO3 v9.4 eingeführt worden.

Die alte Syntax gilt als absolut und wird ab v10 veraltet sein.

Es ist also sehr empfehlenswert, für Ihre neuen und TYPO3-Update/Upgrade-Projekte auf die Symfony-Ausdruckssprache zu migrieren, um sicherzustellen, dass in Zukunft alles gut funktioniert :)

Jetzt herunterladen: Kostenloses TYPO3 Update/Upgrade Kit

Variablen

Schon vor dem TYPO3 9 Release wurden TypoScript-Bedingungen mit der Symfony Expression Language verwendet. Hier sind die Beispiele:

applicationContextGibt die Informationen über die aktuelle Umgebung zurück, z. B. Produktion oder Entwicklung.
pageLiefert alle Eigenschaften der aktuellen Seite
{$theConstant}Liefert den Zugriff auf die TypoScript-Konstante
frontend.user.isLoggedInGibt true zurück, wenn der Frontend-Benutzer eingeloggt ist
typo3.versionLiefert die Versionsinformationen von TYPO3

Funktionen

Um alle bisherigen TypoScript-Bedingungen zu ersetzen, stellt TYPO3 neben den oben genannten Variablen auch Funktionen zur Verfügung.

date()Liefert das aktuelle Datum
like("string", "*chat")Gibt zurück, ob die Zeichenkette char in einer Zeichenkette gefunden wird.
getTSFE()Liefert einen Zugriff auf den TypoScript Frontend Controller $GLOBALS['TSFE'];
request.getQueryParams()Gibt alle GET-Parameter zurück.
site()Gibt die Eigenschaften aus dem Modul Standortverwaltung zurück.

In diesen Release Notes finden Sie die Implementierung der Symfony-Ausdruckssprache für TypoScript-Bedingungen.

Ausdrücke

Vergleichen wir nun zwischen den bisherigen TypoScript-Bedingungen und der Symfony Expression Language.

Sprache der Website

// Until TYPO3 v9
[globalVar = GP:L = 1]

// as of TYPO3 9.4 - the L-parameter is omitted, therefore verification of the site configuration

[siteLanguage("languageId") == "1"]

// Next to the Id, you can also query other properties

[siteLanguage("title") == "English"]

Parameter holen

// Until TYPO3 v9.3

[globalVar = GP:tx_myext_myplugin|bla > 0]

// from TYPO3 v9.4 (GET parameter or POST parameter)

[(request.getQueryParams()['tx_myext_myplugin'])['bla'] > 0 || 

(request.getParsedBody()['tx_myext_myplugin'])['bla'] > 0]

Layer in the page tree

// Until TYPO3 v9.3
[treeLevel = 0,2] 

// From TYPO3 v9.4 
[tree.level in [0,2]]

Seite in Wurzelzeile

// Until TYPO3 v9.3 

[PIDinRootline = 5,10] 

// From TYPO3 v9.4 

[5 in tree.rootLineIds || 10 in tree.rootLineIds]

Seite Eigenschaften

// Until TYPO3 v9.3
[page|backend_layout = 1]

// From TYPO3 v9.4

[page["backend_layout"] == '1']

Domain

// Until TYPO3 v9.3
[globalString = IENV:HTTP_HOST = *.mydomain.com]

// From TYPO3 v9.4

[like(request.getNormalizedParams().getHttpHost(), '*.mydomain.com')]

Konstanten

// Until TYPO3 v9.3
[globalVar = LIT:1 = {$meineTypoScriptKonstante}]

// From TYPO3 v9.4

[{$meineTypoScriptKonstante} == '1']

Im Backend angemeldeter Benutzer

// Until TYPO3 v9.3
[globalVar = TSFE:beUserLogin > 0]

// From TYPO3 v9.4
[getTSFE().beUserLogin]

Ist heute Freitag?

// Until TYPO3 v9.3
[dayofweek = 5]

// From TYPO3 v9.4
[date("w") == 5]

Weitere Beispiele

Wissen Sie was, die Möglichkeiten der Bedingungen sind kaum begrenzt. Lesen Sie die "Referenzen", die zusätzliche Links am Ende dieses Blogbeitrags enthalten.

Möchten Sie TypoScript Bedingungen mit Expression Language?

Um eigene Benutzerfunktionen aufzurufen, rufen wir sie bisher über [userFun] auf.

[userFunc = \Vendor\Extension\UserFunc\MyUserFunc('foo')]

Die ExpressionLanguage kann auch durch die Registrierung von Nachrichtenmethoden erweitert werden.

Schritt 1: Erstellen Sie Configuration/ExpressionLanguage.php in Ihrer Erweiterung.
Schritt 2: Registrieren Sie Ihren Provider, indem Sie ein Array mit Ihrer benutzerdefinierten ExpressionLanguage.php zurückgeben.

<?php
return [
    'tx_myext_provider' => [
        \Vendor\Extension\ExpressionLanguage\MyConditionProvider::class,
    ]
];

Schritt 3: Erstellen Sie Ihre benutzerdefinierte Klasse, um Ihren Code zu schreiben

Schauen Sie sich den TypoScript-Bedingungsanbieter ExpressionLanguage aus dem TYPO3-Kern wie folgt genauer an:

class TypoScriptConditionProvider extends AbstractProvider
	{
	    public function __construct()
	    {
	        $typo3 = new \stdClass();
	        $typo3->version = TYPO3_version;
	        $typo3->branch = TYPO3_branch;
	        $typo3->devIpMask = trim($GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask']);
	        $this->expressionLanguageVariables = [
	            'request' => GeneralUtility::makeInstance(RequestWrapper::class, $GLOBALS['TYPO3_REQUEST'] ?? null),
             'applicationContext' => (string)GeneralUtility::getApplicationContext(),
            'typo3' => $typo3,
        ];
        $this->expressionLanguageProviders = [
            Typo3ConditionFunctionsProvider::class
        ];
    }
}

Fazit

  • Halten Sie sich an die bewährte Praxis, brandneue TypoScript-Bedingungen mit der Symfony Expression Language zu verwenden, da die alten ab TYPO3 v10 veraltet sein werden.
  • Denken Sie daran, alte TypoScript-Bedingungen auf neue zu migrieren, wenn Sie Ihre Projekte aktualisieren.
  • Lesen Sie die Dokumentation weiter, um über alle neuen TypoScript-Bedingungen informiert zu sein.
  • Spüren Sie weiterhin die Kraft und Schönheit von OpenSource-Projekten und Community = TYPO3 + Symfony.

Vielen Dank fürs Lesen! Fühlen Sie sich frei, jede Anregung oder Feedback an unten Kommentarfeld zu schreiben.

Sie können mein Patreon werden unter https://www.patreon.com/sanjay_nitsan. Ich freue mich, wenn ich weiterhin motiviert bin, coolere TYPO3-Blogs zu schreiben :)

Menschen zur Zusammenarbeit inspirieren! (TYPO3 + Symfony).

Comments and Responses

×

Name is required!

Enter valid name

Valid email is required!

Enter valid email address

Comment is required!

You have reached the limit for comments!

* These fields are required.

Be the First to Comment