Wie kann man TYPO3 Context nutzen, um die Umgebung zu verbessern?

Wissen Sie, was TYPO3-Kontext ist? Oder suchen Sie nach einem Konfigurationsleitfaden für Anfänger bis Fortgeschrittene, um TYPO3-Kontext auf Webserver- und Anwendungsebene zu verwalten? In diesem Artikel lernen Sie eine praktische Schritt-für-Schritt-Anleitung zur Verwendung von TYPO3-Kontext, z.B. Datenbankkonfiguration, TypoScript-Bedingung, Website-Konfiguration, TYPO3-CLI, etc.

Wie kann man TYPO3 Context nutzen, um die Umgebung zu verbessern?

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

Wissen Sie, was TYPO3-Kontext ist? Oder suchen Sie nach einem Konfigurationsleitfaden für Anfänger bis Fortgeschrittene, um Webserver & TYPO3-Kontext auf Anwendungsebene zu verwalten? In diesem Artikel lernen Sie eine praktische Schritt-für-Schritt-Anleitung zur Verwendung von TYPO3-Kontext, z.B. Datenbankkonfiguration, TypoScript-Bedingung, Website-Konfiguration, TYPO3-CLI, etc.

Moderne TYPO3-Entwickler arbeiten an der Automatisierung und mehreren TYPO3-Umgebungen wie Entwicklungsserver, Produktionsserver, Staging-Umgebung, etc. Glücklicherweise bietet das TYPO3 CMS seit Jahren eine entwicklerfreundliche TYPO3-Kontextkonfiguration out-of-box.

Bereiten Sie sich darauf vor, Fähigkeiten zur Konfiguration des TYPO3-Kontextes sowohl auf Serverebene als auch auf der Ebene des Anwendungskontextes zu erwerben.

Im TYPO3 CMS können Sie im oberen Panel (oben im Screenshot) - Was ist der aktuelle TYPO3-Anwendungskontext ganz einfach kennenlernen.

Vereinfacht ausgedrückt ist der TYPO3-Kontext ein Ansatz, um eine bestimmte TYPO3-Umgebung wie Produktion, Staging, einen Testserver usw. zu definieren. Das bedeutet, dass Sie für jede Umgebung eine bestimmte Konfiguration mit den verfügbaren Bedingungen in PHP, Extbase, TypoScript, Yaml usw. definieren können.

Hier finden Sie Beispiele für verschiedene mögliche Typen von TYPO3-Kontexten.

Jede Anfrage, egal ob sie von der Befehlszeile oder über HTTP läuft, läuft in einem bestimmten Anwendungskontext. TYPO3 CMS bietet genau drei eingebaute Kontexte:

Die TYPO3_CONTEXT-Variable

Dezidierte Umgebungsvariable, die TYPO3 anweist, verschiedene Kontextumgebungen zu definieren.

Welche sind standardmäßig im TYPO3-Kontext verfügbar?

  • Produktion (Standard) - sollte für eine Live-Site verwendet werden
  • Entwicklung - verwendet für Entwicklung
  • Testing - wird nur intern bei der Ausführung von TYPO3-Kerntests verwendet. Sie darf nicht anderweitig verwendet werden.

Ist ein benutzerdefinierter TYPO3-Kontext vorhanden? Ja, Sub-Kontext!

Natürlich können Sie Ihren eigenen TYPO3-Kontext erstellen, indem Sie Subtext definieren. Hier sind einige Beispiele.

Syntax

  • <MainContext>/<SubContext>

Beispiele

  • Produktion/Leben
  • Produktion/Live/Server2
  • Entwicklung/Staging

Testing

Production

1. Schritt zur Erstellung eines TYPO3-Kontextes, Sie müssen "TYPO3_CONTEXT" auf Ihrem bevorzugten Web-Server definieren, Mal sehen wie!

Welche Möglichkeiten gibt es, TYPO3-Kontext im Apache-Webserver zu definieren?

Im Apache-Webserver können Sie den TYPO3-Kontext auf verschiedene Arten konfigurieren.

Option #1 Verwendung der SetEnv-Direktive von Apache
Wenden Sie sich an Ihren Server-Administrator, um die Konfiguration SetEnv Apache's zu erstellen, Hier sind einige Beispiele.

 

# Define main TYPO3 context
SetEnv TYPO3_CONTEXT Development

# Define domain-wise main TYPO3 context
SetEnvIf Host www\.T3Terminal\.com$ TYPO3_CONTEXT=Production
SetEnvIf Host testing\.T3Terminal\.com$ TYPO3_CONTEXT=Testing
SetEnvIf Host dev\.T3Terminal\.local$ TYPO3_CONTEXT=Development

 

Option #2 Verwendung von .Htaccess oder mod_rewrite
Wenn Sie den Apache-Server mit Shared Hosting verwenden, können Sie TYPO3_CONTEXT auch mit .htaccess oder mode_rewrite vhost.

 

# In your Apache configuration (either .htaccess or vhost)
# you can either set a context to static value with:
SetEnv TYPO3_CONTEXT Development

# Or set context depending on the current host header
# using mod_rewrite module

RewriteCond %{HTTP_HOST} ^dev\.T3Terminal\.com$
RewriteRule .? - [E=TYPO3_CONTEXT:Development]

RewriteCond %{HTTP_HOST} ^staging\.T3Terminal\.com$
RewriteRule .? - [E=TYPO3_CONTEXT:Production/Staging]

RewriteCond %{HTTP_HOST} ^www\.T3Terminal\.com$
RewriteRule .? - [E=TYPO3_CONTEXT:Production]

# or using setenvif module
SetEnvIf Host "^dev\.T3Terminal\.com$" TYPO3_CONTEXT=Development
SetEnvIf Host "^staging\.T3Terminal\.com$" TYPO3_CONTEXT=Production/Staging
SetEnvIf Host "^www\.T3Terminal\.com$" TYPO3_CONTEXT=Production

 

Option #3 TYPO3_Kontext ohne .Htaccess
Wenn Sie irgendwie keinen Zugang zum Modifizieren mit .htaccess oder mode_rewrite haben, können Sie diese Lösung TYPO3 Context ohne .Htaccess (Anmerkung: Von mir noch nicht getestet).

Wie können wir TYPO3-Kontext in NGNIX konfigurieren?

Viele Leute haben begonnen, mit NGNIX zu arbeiten, was wirklich großartig ist. Sie können die NGNIX-Konfiguration einfach wie folgt konfigurieren.

 

location ~ \.php$ {
  include         fastcgi_params;
 fastcgi_index   index.php;
 fastcgi_param   TYPO3_CONTEXT  Development/Dev;
  fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

 

Wie man den TYPO3-Kontext im Docker + DDEV einrichtet?

TYPO3-Gemeinschaft liebt DDEV-Lösung als lokale Entwicklungsumgebung, wir lieben sie auch :) Sie können TYPO3_CONTEXT einfach im Docker/DDEV mit den folgenden Schritten konfigurieren.

Schritt 1. Erstellen Sie eine Docker-Compose-Kontextdatei in Ihrem .ddev-Ordner

 

touch .ddev/docker-compose.context.yaml

 

Schritt 2. Fügen Sie die untenstehende Konfiguration in die Datei

 

version: '3.6'
services:
   web:
    environment:
- TYPO3_CONTEXT=Development

Können wir den TYPO3-Kontext CLI-basiert konfigurieren?

Ja, warum nicht! Heutzutage werden TYPO3-Entwickler immer schlauer und arbeiten mit TYPO3-CLI wie mit einer populären Lösung des "typo3-console package". Um den TYPO3-Kontext in CLI zu konfigurieren, folgen Sie diesen Schritten.

Schritt 1. Gehen Sie zum Home-Verzeichnis (Linux oder Mac)

Schritt 2. Suchen Sie .profile oder .bashrc

Schritt 3. TYPO3_CONTEXT

Konfigurieren

 

export TYPO3_CONTEXT=Testing

 

Schritt 4. Kreuzverifizieren Sie es

 

env | grep TYPO3_CONTEXT

Bei d way, Sie können "TYPO3_CONTEXT" für jeden Befehl zur Laufzeit Ihrer TYPO3 CLI-Befehle wie folgt angeben.

 

# Run in Development TYPO3 Context
TYPO3_CONTEXT=Development ./typo3/cli_dispatch.phpsh

# Run in Production TYPO3 Context
TYPO3_CONTEXT=Production exec ./vendor/bin/typo3cms cache:flush

# Run in Testing TYPO3 Context
TYPO3_CONTEXT=Testing exec ./vendor/bin/typo3cms install:fixfolderstructure

 

 

Gut gemacht! Ich hoffe, Sie haben die TYPO3_CONTEXT-Variable erfolgreich auf Ihrem Web-Server, Ihrer lokalen Entwicklungsumgebung und/oder TYPO3-CLI konfiguriert.

Nun, sind Sie davon begeistert, wie einfach es ist, TYPO3_CONTEXT in echten TYPO3-Anwendungen zu verwenden, einige Beispiele wie

  • Jede TYPO3-Umgebung sollte eine eigene TYPO3-Site-URL haben (über config.yaml).
  • Jede TYPO3-Umgebung sollte eine separate Datenbankkonfiguration haben (über AdditionalConfiguration.php).
  • Jede TYPO3-Umgebung kann unterschiedliche Templating-Ausführung haben (durch TypoScript)
  • Und so weiter, je nach Bedarf Ihrer TYPO3-Anwendung können Sie TYPO3_CONTEX
  • verwenden.

Seit TYPO3 v9 haben wir ein cooles Site-Verwaltungsmodul zur Verwaltung mehrsprachiger, Site-URLs usw. Um eine separate TYPO3-Site-URL für jede TYPO3-Kontext-Umgebung/jeden TYPO3-Server zu erstellen, können Sie die folgenden Einstellungen vornehmen.

 

# config/sites/project/config.yaml (composer-based TYPO3 instance)
# or
# typo3conf/ext/sites/project/config.yaml (non-composer based TYPO3 instance)
rootPageId: 1
base: 'https://t3planet.com/'
baseVariants:
  -
    base: 'http://dev.t3planet.com/'
    condition: 'applicationContext == "Development"'
  -
    base: 'http://staging.t3planet.com/'
    condition: 'applicationContext == "Production/Staging"'

Eine der wichtigsten Aufgaben bei der Verwendung von TYPO3_CONTEXT ist die Definition mehrerer Datenbankkonfigurationen für jede Ihrer TYPO3-Umgebungen.

TYPO3 bietet entwicklerfreundliche Funktionen, um den aktuellen TYPO3-Anwendungskontext zu erhalten.

 

// Since TYPO3 9LTS
\TYPO3\CMS\Core\Core\Environment::getContext()

// Prior to TYPO3 9LTS
\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext()

 

Sie können dies leicht erreichen, indem Sie PHP-Code zu Ihrer AdditionalConfiguration.php hinzufügen, hier ist das Beispiel.

 

// typo3conf/AdditionalConfiguration.php
<?php
switch (\TYPO3\CMS\Core\Core\Environment::getContext()) {
    case 'Development':
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = 1;
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'] = '*';

        $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] = array_merge(
            isset($GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'])
            ? $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']
            : [],
            [
                'dbname' => 'db',
                'host' => 'db',
                'password' => 'db',
                'port' => '3306',
                'user' => 'db',
            ]
        );
        break;

    case 'Production':
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = 0;
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'] = '192.168.1.*';

        $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] = array_merge(
            isset($GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'])
            ? $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']
            : [],
            [
                'dbname' => 'project',
                'host' => '127.0.0.1',
                'password' => 'password',
                'port' => '3306',
                'user' => 'user',
            ]
        );
        break;
}

Möchten Sie den TYPO3-Kontext für Ihre eigene TYPO3-Extension oder Vorlage verwenden? Dann können Sie die TYPO3-Kernkontext-APIs einfach wie folgt aufrufen.

 

$applicationContext = \TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext();
$applicationContext->isDevelopment();
$applicationContext->isTesting();
$applicationContext->isProduction();

 

 

Und der letzte, Basierend auf Ihren Bedürfnissen, verwendet den "applicationContext" Symfony-Ausdruck TypoScript, um die TYPO3-Kontextumgebung zu überprüfen.

Es kann eine Reihe von praktischen Beispielen geben, z.B.: Auf dem Produktionsserver können Sie die Komprimierung von Javascript-Dateien aktivieren, während die Entwicklung diese Komprimierung deaktiviert haben sollte ;)

 

# Check in Production/Live
[applicationContext = Production/Live]
   config.contentObjectExceptionHandler = 0
   config {
      compressJS = 1
      concatenateJS = 1
   }
[end]

# Check in Development mode
[applicationContext = Development]
   config.contentObjectExceptionHandler = 1
   config {
      compressJS = 0
      concatenateJS = 0
   }
[end]

# Check in more then one TYPO3 context by “,” comma separated
[applicationContext = Development/Debugging, Development/ClientA]
  [...]
[end]

# Check with regular expression to match your TYPO3 context
[applicationContext = /^Development\/Preview\/d+$/]
   [...]
[end]

Mit dem TYPO3-Befehl `typo3/sysext/core/bin/typo3` können Sie nun den aktuellen TYPO3-Anwendungskontext ermitteln.

Ich habe eine TYPO3-Erweiterung gefunden, die mit TYPO3_CONTEXT verwandt ist. Übrigens habe ich diese Erweiterung nicht getestet. Wenn Sie sie gut kennen, teilen Sie Ihre Erfahrungen im Kommentarfeld mit.

TYPO3-Kontext-Konfigurationslader (EXT:context_loader)

Ein einfacher TYPO3-Konfigurationslader zum Erstellen und Konfigurieren Ihrer TYPO3-Kontextumgebung in /typo3conf/AdditionalConfiguration/

Danke für das Lesen des Artikels.

Ich tue mein Bestes, einen einfachen und leicht verständlichen Leitfaden-Blog für Sie zu führen, ich hoffe, Sie lernen mit Spaß :) Lassen Sie uns schnell den Artikel rekapitulieren.

  • Verstehen und herausfinden, warum und wie Sie die TYPO3-Kontextfunktion benötigen? Sie sollten vorbereiten, wo Sie den TYPO3-Kontext implementieren sollten.
  • Vergewissern Sie sich, dass Ihr Webserver (wie Apache, NGINX) bereit und mit dem TYPO3-Kontext konfiguriert ist.
  • Beginnen Sie mit der Implementierung von TYPO3-Kontext auf Anwendungsebene mit PHP, TypoScript, YAML z.B., Konfiguration mehrerer Datenbanken, Site-URLs usw.

Haben Sie Erfahrung mit dem TYPO3-Kontext? Oder: Haben Sie Fragen zur Implementierung des TYPO3-Kontextes? Ich würde mich freuen, Ihre Erfahrungen zu erhalten, um solche kleinen, aber feinen TYPO3-Features weiter zu verbessern.

Haben Sie einen glücklichen TYPO3-Kontext!

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 Kann das Bild nicht gelesen werden? Klicken Sie hier, um zu aktualisieren
  • user
    Peter Schmidt 2023-07-14 um 3:22 pm
    I never realized the power of TYPO3 Context until I read your blog post. The insights you provided on how to leverage it to improve the environment were eye-opening.
  • user
    Ottfried Galen 2020-10-06 um 8:35 am
    Thank you for this serious great info on TYPO3 context and TYPO3 environments. It's always pleasure reading your insights Sanjay.
  • user
    Franz Holzinger 2020-10-05 um 2:39 pm
    There are 2 more errors in the config.yaml example.
    The closing quote is missing at the end.

    -
    base: 'http://dev.t3planet.com/'
    condition: 'applicationContext == "Development"
    -
    base: 'http://staging.t3planet.com/'
    condition: 'applicationContext == "Production/Staging"

    ===>

    -
    base: 'http://dev.t3planet.com/'
    condition: 'applicationContext == "Development"'
    -
    base: 'http://staging.t3planet.com/'
    condition: 'applicationContext == "Production/Staging"'