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 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.
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!
Post a Comment
- Wow, the 21 TypoScript Conditions Cheatsheet is incredibly comprehensive!
- Wow, the 21 TypoScript Conditions Cheatsheet is incredibly comprehensive!
- Hi t3planet.com admin, You always provide useful links and resources.
- Nice Article, Very Helpful.!!
- Very helpful article.!!
Dhyana Chauhan
Tech Expert & Customer ManagerDhyana Chauhan is the customer support manager at T3Planet, having vast experience as an technology lead who loves exploring everything that’s in trend, especially TYPO3. Being a TYPO3 fanatic, in her free time, she loves…
More From Author