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

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

This article machine-based automatically translated from English to the German language. As this article is not human translated, there may be chances of context, spelling and grammar mistakes. We recommend to read original article in English version.

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.

Was ist der Anwendungskontext von TYPO3?

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.

Welches ist der Standard-TYPO3-Kontext?

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

Wie können wir den TYPO3-Kontext auf dem Web-Server vorbereiten?

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

 

 

Wo verwende ich TYPO3-Kontext in einer Echtzeit-TYPO3-Anwendung?

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.

Verwenden Sie 1. Website-URL-Verwaltung mit Backend-Site-Konfiguration (config.yaml)

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://t3terminal.com/'
baseVariants:
  -
    base: 'http://dev.t3terminal.com/'
    condition: 'applicationContext == "Development"'
  -
    base: 'http://staging.t3terminal.com/'
    condition: 'applicationContext == "Production/Staging"'

Verwenden Sie 2. Unterschiedliche Datenbank-Konfiguration (AdditionalConfiguration.php)

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;
}

Verwendung 3. PHP TYPO3 Kern-APIs (für Extbase/Fluid)

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();

 

 

Verwenden Sie 4. TypoScript-Bedingungen [applicationContext]

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]

Verwenden Sie 5. TYPO3-Kontext im CLI anzeigen

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

Hilfreiche TYPO3-Kontexterweiterung

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/

Conclusion

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!

Post Comment

Your email address will not be published. Required fields are marked *

×

Name ist erforderlich!

Geben Sie einen gültigen Namen ein

Gültige E-Mail ist erforderlich!

Gib eine gültige E-Mail Adresse ein

Kommentar ist erforderlich!

Google Captcha ist erforderlich!

Bemerkungen :

  • Ottfried Galen October 6, 2020 Beim 8:35 am
    Thank you for this serious great info on TYPO3 context and TYPO3 environments. It's always pleasure reading your insights Sanjay.
  • Franz Holzinger October 5, 2020 Beim 2:39 pm
    There are 2 more errors in the config.yaml example.
    The closing quote is missing at the end.

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

    ===>

    -
    base: 'http://dev.T3Terminal.com/'
    condition: 'applicationContext == "Development"'
    -
    base: 'http://staging.T3Terminal.com/'
    condition: 'applicationContext == "Production/Staging"'
  • Franz Holzinger October 5, 2020 Beim 2:25 pm
    A small issue in the config.yaml:

    base: 'httsp://T3Terminal.com/'

    This must be https.
[Translate to German:] TYPO3 extensions What to know before you build

TYPO3-Erweiterungen: Was man wissen sollte, bevor man sie baut!

TYPO3 wird mit einer Menge großartiger Funktionen ausgeliefert, aber manchmal müssen Sie Ihrer Website Funktionen hinzufügen - zum…

TYPO3 Multisite: Wie, wann und warum?

TYPO3 Multisite: Wie, wann und warum?

In diesem Artikel erkläre ich Ihnen alles, was Sie wissen müssen, um TYPO3 Multisite zu installieren, welche Vorteile es bietet…

Wie benutzt man TYPO3 Fluid? (Grundlegende bis fortgeschrittene Anleitung)

Wie benutzt man TYPO3 Fluid? (Grundlegende bis fortgeschrittene Anleitung)

TYPO3 Fluid - Eine schnelle & sichere Template-Engine des TYPO3 CMS. Egal, ob Sie TYPO3 Entwickler oder TYPO3 Integrator sind; Sie…

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