Anzeige
Anzeige
Software & Entwicklung
Artikel merken

Teil 1: Tour de Core: Inside TYPO3

Selbst wenn man TYPO3 einigermaßen beherrscht, so fragt man sich doch manchmal, was „im Inneren“ des CMS passiert. Diese neue Artikelserie wirft einen Blick hinter die Kullisen und zeigt, was im Kern von TYPO3 passiert. Teil 1 beschreibt das Frontend-Rendering zur Darstellung einer Webseite, für das die Datei index.php verantwortlich ist. Das Wissen um die genauen Abläufe ist von elementarer Bedeutung, gerade wenn es um die Entwicklung eigener Extensions oder um die Fehlersuche geht.

7 Min. Lesezeit
Anzeige
Anzeige

In der Reihe „Inside TYPO3“ werfen wir einen Blick unter die Motorhaube von TYPO3. Wir werden untersuchen, wie es im Innersten aussieht und dabei diejenigen Bestandteile unter die Lupe nehmen, die TYPO3 so mächtig machen. Die Serie richtet sich dabei nicht nur an Profis und Fortgeschrittene, sondern besonders auch an Anfänger, die das System von Grund auf kennenlernen möchten. Zwar ist es zum Betrieb von TYPO3 nicht zwingend notwendig, so tief in das System einzusteigen – es kann aber das Verständnis extrem erleichtern, wenn man zumindest rudimentär versteht, was genau an welcher Stelle passiert.

Anzeige
Anzeige

Der erste Teil der Reihe zeigt den Ablauf des Frontend-Renderings. Dies mag auf den ersten Blick etwas trocken anmuten. Wenn man aber live mitmacht und die einzelnen Schritte direkt im Quellcode nachvollzieht, wird dies eine spannende Entdeckungsreise. Daher: Editor an, index.php öffnen und los geht’s zur „Tour de Core“.

Die Datei „index.php“ im Rootverzeichnis einer jeden TYPO3-Installation ist immer die Basis eines gewöhnlichen Website-Aufrufs mit TYPO3. Egal welche URL Sie im Browser aufrufen, letztlich wird die Datei „index.php“ aufgerufen. Sofern vorhanden, werden dort noch GET- oder POST-Parameter übergeben. In der Datei ist generell der Pfad zur TypoScript-Library (PATH_tslib) festgelegt. Auch die Datei „index_ts.php“ ist inkludiert, die sich normalerweise innerhalb der TYPO3-Systemextension „cms“ befindet, also meist im Ordner „/typo3/sysext/cms/tslib/“.

Anzeige
Anzeige

Wenn die Datei nicht existiert oder sich der Pfad nicht bestimmen lässt, wird die weitere Abarbeitung mit einer Fehlermeldung quittiert. Die Datei „index_ts.php“ ist nun für den restlichen Prozess zuständig. In der Datei findet folgender komplexer Ablauf (Frontend-Rendering-Prozess) statt:

Anzeige
Anzeige

1. Bestimmung einiger Umgebungsparameter wie Betriebssystemplattform und Art der
PHP-Unterstützung (cgi, isapi etc.)

2. Der Pfad zum Verzeichnis „typo3conf“ wird bestimmt (Abbruch, falls nicht bestimmbar) sowie zum Verzeichnis „t3lib“ (PATH_t3lib).

Anzeige
Anzeige

3. Start des TYPO3-internen Time-Trackers, der die Parse-Zeiten und Kommentare dazu loggt, die später vom Admin-Panel ausgegeben werden (PATH_t3lib.’class.t3lib_timetrack.php‘). Es ist möglich, die Time-Track-Funktionalität in eigenen Extensions zu verwenden.

4. Einige obligatorische Klassen werden nachgeladen: die Klasse „_t3lib_div“, die diverse allgemeine, oft gebrauchte Funktionen beinhaltet sowie die Klasse „t3lib_extmgm“, die das Extension-Handling durchführt (PATH_t3lib.’class.t3lib_div.php‘ und PATH_t3lib.’class.t3lib_extmgm.php‘).

5. Nun laden Sie die Konfiguration aus „PATH_t3lib.’config_default.php’“. Dazu erhält zunächst die globale Variable „$TYPO3_CONF_VARS“ eine Deklaration mit Standard-Werten. Anschließend wird die zentrale Konfigurationsdatei geladen, die sich in „/typo3conf/localconf.php“ befindet. Die wichtigsten Daten hier sind die Datenbank-Zugangsdaten und die Liste der eingebundenen Extensions. Schließlich laden Sie sämtliche Konfigurationen der eingebundenen Extensions, die sich in den Dateien „ext_localconf.php“ in den jeweiligen Extension-Verzeichnissen befinden. Daneben lässt sich prüfen, ob der Datenbankzugriff funktioniert hat und die (Haupt-)Extension „cms“ erfolgreich geladen wurde. Ist dem nicht so, wird die Abarbeitung sofort abgebrochen.

Anzeige
Anzeige

6. Als Nächstes werten Sie den eID-Parameter aus. Dieser wird entweder per GET oder POST übermittelt und dazu verwendet, einen „Ausstiegspunkt“ für den hier dargestellten Ablauf zu definieren. Dieser Ausstieg kommt bei AJAX-Anwendungen zum Einsatz, da hier lediglich bestimmte Daten nachgeladen werden sollen. Solche Anwendungen benötigen aber nicht den ganzen (weiteren) Frontend-Rendering-Prozess, da ja die Seite nicht neu aufgebaut werden soll, sondern nur die Daten gebraucht werden. In diesem Fall wird die Klasse nachgeladen, die als eID-Parameter übergeben wurde sowie eine eID-Helper-Klasse aus „PATH_tslib.’class.tslib_eidtools.php’“. Sie enthält (momentan) lediglich zwei Funktionen: eine, um die Verbindung zur Datenbank herzustellen, und eine, um den (etwaigen) Frontend-User zu definieren, so dass sich dessen Daten verwenden lassen.

7. Wenn Sie also den eID-Parameter nicht eingesetzt haben, geht der Rendering-Prozess weiter. Dafür laden Sie zunächst folgende Frontend-Bibliotheken:

  • PATH_tslib.’class.tslib_fe.php‘: Klasse für das TypoScript-basierte Frontend
  • PATH_t3lib.’class.t3lib_page.php‘: Klasse ist für Seitenfunktionen zuständig.
  • PATH_t3lib.’class.t3lib_userauth.php‘: Klasse zur Authentifizierung von Frontend-Usern
  • PATH_tslib.’class.tslib_feuserauth.php‘: Klasse für die Frontend-Session und das Login
  • PATH_t3lib.’class.t3lib_tstemplate.php‘: Klasse für die Template-Verarbeitung
  • PATH_t3lib.’class.t3lib_cs.php‘: Klasse für die Zeichensatzkonvertierung (von und zu UTF-8)

8. An dieser Stelle wird das Hauptobjekt „$TSFE“ (TypoScript-Frontend) initialisiert und mit Werten gefüllt. Dies sind zunächst einige GPvars (GET-/POST-Variablen): „id“, „type“, „no_cache“, „cHash“, „jumpurl“, „MP“ und „RDCT“.

Anzeige
Anzeige

9. Wenn der RDCT-Parameter gesetzt war, wird mittels des zugehörigen MD5-Hashwerts der entsprechende Link aus der Datenbank geholt und eine Weiterleitung dorthin ausgelöst.

10. Sofern die Gzip-Kompression in der Konfigurationsvariablen „$TYPO3_CONF_VARS[‚FE‘][‚compressionLevel‘]“ gewählt wurde, schaltet sich nun die Kompression ein.

11. An dieser Stelle wird der Frontend-User (sofern vorhanden) initialisiert. Es wird hier beispielsweise der Inhalt der Session geholt und überprüft, ob sich der User neu einloggen muss.

Anzeige
Anzeige

12. Wenn das „Backend-Cookie“ gesetzt ist (der Wert „preBeUser“ ist im Cookie vorhanden), wird als nächstes überprüft, ob ein Backend-User eingeloggt ist, der dann initialisiert wird. Im Erfolgsfall laden sich zahlreiche Klassen nach, die gewisse Backend-Funktionalitäten beinhalten wie:

  • PATH_t3lib.’class.t3lib_befunc.php‘: Klasse, die Standard-Funktionen des Backends bereitstellt.
  • PATH_t3lib.’class.t3lib_userauthgroup.php‘: Klasse zur Authentifizierung und Initialisierung für Backend-User
  • PATH_t3lib.’class.t3lib_beuserauth.php‘: Klasse für die Authentifizierung von Backend-Usern
  • PATH_t3lib.’class.t3lib_tsfebeuserauth.php‘: Klasse für die Authentifizierung von Backend-Usern (spezifisch für TSFE)

13. Sollten Sie einen Workspace-Preview angefordert haben, wird dieser nun initialisiert. Je nach Einstellung im Backend sehen Sie ja nicht unbedingt die aktuelle Website, sondern ein Demo-Workspace oder Ähnliches.

14. Nun lässt sich die Page-ID bestimmen, da dies die zentrale Komponente im Rendering-Prozess ist. Jedes Element ist genau einer Page-ID zugeordnet.

Anzeige
Anzeige

15. Hier wird das Table Configuration Array ($TCA) eingelesen. Dieses globale Array definiert die (veränderbaren) Datenbanktabellen und die Beziehung zwischen ihnen. Zudem legt das TCA fest, wie Datenbanktabellen im Backend bzw. hier im Frontend-Editing dargestellt werden.

16. Nun startet der Versuch, die Seite vom eingebauten TYPO3-Cache zu erhalten.

17. Anschließend wird überprüft, ob das config-Array existiert. Falls nicht, wird es geladen.

Anzeige
Anzeige

18. Wenn POST-Daten übermittelt wurden, überführen Sie diese nun in den Zeichensatz, der vorher festgelegt wurde.

19. Es folgt das Setzen der Sprache im Frontend-Rendering und das Einstellen der Locales (Format von Datum, Zeit etc.).

20. Wenn die aktuelle Seite per TypoScript-Typolink als „externe Seite“ realisiert worden ist und zudem der JumpUrl-Mechanismus aktiv ist, wird nun die URL der Seite bestimmt, auf die weitergeleitet werden soll. Die Weiterleitung selbst erfolgt bei Punkt 27. Der JumpUrl-Mechanismus ist so konzipiert, dass nicht direkt auf die weiterzuleitende Seite gesprungen wird, sondern zuerst der Rendering-Prozess seinen Durchlauf beendet. Das hat den Vorteil, dass es zum Beispiel eine Statistik darüber gibt, wie oft der Link angeklickt wurde. An- bzw. Ausschalten lässt sich dieses Verhalten mit der TypoScript-Einstellung „config“ (im Setup des Root-Templates):

  • config.jumpurl_enable = 1 (oder eben 0) und
  • config.jumpurl_mailto_disable = 0 (oder eben 1)

21. An dieser Stelle erfolgt die Verarbeitung sämtlicher Formulardaten. Dies betrifft zum einen die normalen Frontend-Formulare, zum anderen die E-Mail-Formulare (bei denen der Inhalt per E-Mail versendet wird, z. B. als Bestätigung bei Anmeldungen).

22. Jetzt wird die Seite generiert, also gerendert, aber noch nicht ausgegeben. Wenn unter Punkt 16 eine Cache-Version der Seite vorhanden war, wird generell diese verwendet. Ansonsten wird die Seite aus ihren Elementen neu zusammengebaut.

23. Nun lassen sich etwaige weitere Dateien einfügen, zum Beispiel jene, die über das TypoScript-Objekt „PHP_SCRIPT_INT“ definiert wurden (so genannte includeLibs).

24. Jetzt endlich erfolgt der Output der Seite, sofern keine JumpUrl definiert wurde. Sämtliche Inhalte und auch die externen Skripte werden im Objekt „$TSFE-content“ zusammengefügt und schließlich per echo-Befehl ausgegeben. Ist allerdings die Gzip-Kompression aus Punkt 10 eingeschaltet, wird der Inhalt nicht direkt ausgegeben, sondern zwischengespeichert und erst bei Schritt 31 ausgegeben.

25. Anschließend wird die mögliche Frontend-Session abgespeichert, die unter 11. ermittelt wurde.

26. Nun betreibt TYPO3 noch etwas Statistik, indem es zum Beispiel die Parse-Zeit (Zeit, die das Dokument für seine Darstellung benötigt) ermittelt.

27. Wenn eine JumpUrl definiert ist, erfolgt hier die Weiterleitung auf die externe Seite.

28. Für den Fall, dass die Seiten laut Konfiguration statisch publiziert werden sollen, wird dies jetzt durchgeführt. Dazu müssen Sie die Funktionen „static_publish“ und „static_upload“ installiert und aktiviert haben, die Sie in der Extension „dkd_tools“ finden.

29. Sofern man das Admin-Panel eingeschaltet hat, wird dieses nun an den Quellcode angehängt und mit ausgegeben.

30. Wenn das Debugging eingeschaltet ist, werden sämtliche Debug-Messages angezeigt.

31. Jetzt erfolgt die Ausgabe der Daten, falls die Gzip-Kompression eingeschaltet war.

Jetzt endlich ist das Rendering fertig. Man sieht, dass dort einiges unter der Haube passiert, bis jede noch so einfache Webseite angezeigt werden kann. Spannend ist es nun, jeden der obigen Schritte nachzuvollziehen, indem man an die entsprechende Stelle einen die();-Befehl einbaut, der zunächst die weitere Abwicklung stoppt. Davor kann man sich nun mittels „echo()“- oder „print_r()“-Anweisung alle möglichen Variablen ausgeben lassen, um so das System genauer an den jeweiligen Stellen zu erforschen.

So könnte man sich beispielsweise (wie in Schritt 8 beschrieben) in der Datei „index_ts.php“ die Variable „$TSFE“ ausgeben lassen und genauer untersuchen. Suchen Sie hierzu die Zeile „if ($TSFE->RDCT) {$TSFE->sendRedirect();}“ und platzieren Sie davor folgenden Code:

DEBUG-Ausgabe
... (ca. Zeile 182)
echo „<pre>“;
print_r($TSFE,1);
die();
...
if ($TSFE->RDCT) {$TSFE->sendRedirect();}

Listing 1

Somit haben Sie alles, was Sie für Ihre persönliche „Tour de Core“ benötigen. Viel Spaß bei der Entdeckungsreise.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige