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 wider. 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ßbuchstaben optisch trennen.
Innerhalb dieses Ordners startet die definierte 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
- Private
- Classes
Die fettgedruckten Ordner 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.
Wofür 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 ebenfalls optional, das heißt 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 eingebunden
- Wenn das TYPO3 Frontend von einem Benutzer aufgerufen wird, der sich im Backend eingeloggt hat
Und wofür 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
- 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
- Registrierung von Frontend Plugins
- das geschieht ab TYPO3 11 innerhalb von Configuration/Overrides/tt_content.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.