So ist eine Extension in TYPO3 aufgebaut

Eine Erweiterung in TYPO3 ist der Oberbegriff für jegliche Erweiterung des TYPO3 CMS. Sie hat einen Ausgangsordner mit defnierter Verzeichnisstruktur und Dateien.

Alle TYPO3 Erweiterungen (auch Extensions genannt) befinden sich im Ordner: typo3conf/ext. Das sind die sogenannten lokalen Extensions. Darüberhinaus gibt es noch Systemextensions. Die Systemextensions befinden sich im Ordner: typo3/sysext.

Wenn wir über Extenentwicklung in TYPO3 reden, dann meinen wir immer lokale Extensions.

Jede Extension hat folgende Metadaten:

  • Name
  • Beschreibung
  • Urheber / Autor
  • Version

Der Name und Autor ist besonders wichtig und spielt eine zentrale Rolle in der Extensionentwicklung in TYPO3. Für den Namen einer Extension muss man beachten, das dieser keine Leerzeichen enthält. Der Name der Extension spiegelt sich im Ausgangsordner der Erweiterung wieder. Dort wird er in Kleinbuchstaben benannt:

typo3conf/ext/slavlee_package

Hier habe ich 2 Wörter mit einem Unterstrich verbunden. Man könnte auch die beiden Wörter zusammenschreiben, jedoch nicht mit einem Großbuchstabe optisch trennen.

Innerhalb dieses Ordners startet die defnierte Verzeichnisstruktur. Es gibt einige zwingende Ordner und einige Ordner die nicht vom System so vorgegeben werden, jedoch in allen anderen Extensions so erstellt und benannt werden. 

Verzeichnisstruktur einer TYPO3 Erweiterung

  • slavlee_package (Name der Extension)
    • Classes
      • Controller
      • Domain
        • Model
        • Repository
      • ViewHelpers
      • Utility
      • Service
    • Configuration
      • FlexForms
      • TypoScript
      • TCA
        • Overrides
    • Resources
      • Private
        • Language
        • Layouts
        • Partials
        • Templates
      • Public
        • Css
        • JavaScript
        • Images
        • Icons

Die fettgedruckten Ordnern sind Pflichtordner. D.h. dass diese genau mit gleichen Namen und Position exisiteren müssen, wenn man sie denn braucht. Alle anderen Ordner können so benannt und platziert werden. Es wäre jedoch theoretisch möglich diese auch andere Namen zu geben oder in anderen Ordner abzulegen. Die Ausnahme sind die Unterordner von Resources/Public. Die können zwar umbenannt werden, jedoch nicht außerhalb vom Public Ordner existieren. Denn nur die Ordner innerhalb von public sind öffentlich zugänglich.

Ich kann dir allerdings nicht empfehlen diese Order umzubenennen, auch die Schreibweise beispielsweise bei JavaScript ist so gewollt. Denn wenn du für ein Backend Modul ein requireJs Modul schreibst, dann muss die Schreibweise und Position genau so sein.

MVC in TYPO3

Der Verzeichnisstruktur kann man sehr gut das MVC - Modell in TYPO3 ablesen. Der Model teil liegt hier:

  • Classes
    • Domain

Der View Teil liegt hier:

  • Resources/Private

und der Controller Teil liegt hier:

  • Classes
    • Controller

Die wichtigsten Dateien einer TYPO3 Erweiterung

Die zwei zentralsten Dateien einer TYPO3 Erweiterung sind zweifelsohne:

  • slavlee_package
    • ext_localconf.php
    • ext_tables.php

Diese beiden Dateien sind Konfigurationsdateien und Ausgangspunkt für diverse TYPO3 Initialisierungen.

ext_localconf.php

Diese Konfigurationsdatei ist optional, dass heisst nicht jede TYPO3 Erweiterung benötigt eine solche Datei. Sie wird nur benötigt, wenn man bestimmte Dinge tun möchte.

Diese Datei wird, wenn vorhanden, immer geladen. Immer bedeutet, sowohl im Frontend als auch im Backend. Die Unterscheidung zwischen Frontend und Backend ist hierbei entscheidend. Da gibt es in TYPO3 gerade in der Extensionentwicklung signifikante Unterschiede.

Für was wird die ext_localconf.php genutzt?

Die ext_localconf - Datei wird genutzt für:

  • Registrierung von Hooks, Signals, XCLASS
  • Registrierung von Request Handlers
  • Jegliche Änderungen an der PageTSConfig
  • Hinzufügen von TypoScript über die API: \TYPO3\CMS\Core\Utility\ExtensionManagementUtility

  • Registrierung von Scheduler Tasks
  • Hinzufügen von Berichte für das Reports Module
  • Registierung von Icons
  • Registrierung von Services über die Service API.

Dinge die man in der ext_localconf.php auf keinen Fall tun solle

Jegliche direkte Änderung innerhalb des globalen Arrays: $GLOBALS['TYPO3_CONF_VARS'] sollten nicht hier vorgenommen werden. Das wird oft nicht funktionieren, weil die Initialisierung in TYPO3 in einer bestimmten Reihenfolge stattfindet und die Ausführung der ext_localconf.php Datei für diese Änderungen nicht zum richtigen Zeitpunkt stattfindet.

ext_tables.php

Die ext_tables.php ist ebenfall optional, dass heisst auch sie muss es nicht unbedingt geben. 

Diese Datei wird im Frontend Kontext nicht immer ausgeführt. Sie wird nur dann ausgeführt, wenn folgende Prozesse angestoßen werden:

  • TYPO3 Backend oder CLI Request ausgeführt wird, d.h. im Backend Kontext wird es immer eingebundne
  • Wenn das TYPO3 Frontend von einem Benutzer aufgerufen wird, der sich im Backend eingeloggt hat

Und für was wird die ext_tables.php genutzt?

Die ext_tables - Datei wird genutzt für:

  • Registrierung von Backend Modulen
  • Hinzufügen von Kontextabhängiger Hilfer über \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr()
  • Hinfzufügen von TCA über \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr()

  • Hinzufügen von Tabellenoptionen über \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages()

  • Registrierung von Scheduler Tasks
  • Veränderungen der globalen Arrays: $GLOBALS['TBE_STYLES'] und $GLOBALS['PAGES_TYPES']

  • Erweiterung der Einstellungen von Backendbenutzern

Dinge die man in der ext_tables.php auf keinen Fall tun solle

  • Jegliche andere Änderungen am TCA, wie Registrierung neuer Felder
    • das macht man in Configuration/TCA/tablename.php
  • Nutzen von \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile()
    • das macht man in Configuration/TCA/Overrides/tablename.php
  • Nutzen von \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile()
    • das macht man in Configuration/TCA/Overrides/sys_template.php

Damit kennst du nun die wichtigsten Ordner und Dateien in einer TYPO3 Extension und bist einen Schritt weiter deine erste TYPO3 Extension zu erstellen.