Die größte Stärke von TYPO3 ist seine Modularität. Durch sogenannte Extensions ist es möglich, die Funktionsweise des Kernsystems zu erweitern. Diese Extensions findet man hauptsächlich in einer Online-Datenbank – dem TER (TYPO3 Extension Repositiory). Hier kann man jede beliebige Extension kostenlos herunterladen. Erstellt und gepflegt werden diese überwiegend durch die Community.
Da TYPO3 auch für große Internetauftritte immer attraktiver wird, werden auch die Anforderungen an die Extensions immer vielfältiger. Und da es nicht für jeden Zweck eine passende Erweiterung gibt, bietet die vorliegende Anleitung eine Schritt-für-Schritt Anleitung zur Erstellung einer eigenen Extension.
Nachfolgend werden wir ein Frontend-Plugin erstellen, welches durch eine Listen- und Detailansicht Datensätze aus der Datenbank im Frontend anzeigt und die TYPO3-üblichen Formulare zu deren Pflege im Backend bereitstellt.
Bevor wir uns an den praktischen Teil wagen, sollten wir zuerst einmal die Problemstellung identifizieren. Nehmen wir also an, eine Anforderung sei es, die zahlreichen Online-Kommunikationsdienste auf einer Seite des Internetauftritts aufzulisten. Das lässt sich einfach über einen Text-Datensatz im Backend von TYPO3 realisieren. Doch was, wenn diese Liste dynamisch sein soll? Eine weitere Anforderung ist es zudem, für jeden Dienst eine Detailansicht anzubieten. Jetzt kann man zwar für jeden Kommunikationsdienst der Liste eine eigene Seite anlegen, jedoch erhöht sich dadurch der Verwaltungsaufwand um ein Vielfaches.
Zum jetzigen Zeitpunkt lässt sich schon recht genau sagen, welche Anforderungen unsere Extension erfüllen soll:
Wir werden im Rahmen dieser Anleitung genau diese Punkte umsetzen und dafür die TYPO3 spezifischen Methoden verwenden.
Eine davon ist der Extension Kickstarter. Es handelt sich dabei um eine Extension (kickstarter), welche wie alle anderen Erweiterungen über den Extension-Manager installiert werden muss.
Einmal installiert wird der Kickstarter als weiterer Punkt in der Auswahlliste des Extension-Managers hinzugefügt. Wählen Sie dort „Make new extension“ um das neue Modul zu öffnen. Es präsentiert sich, wie in der Abbildung zu sehen, auf den ersten Blick eine eher überschaubare Menge an Optionen. Lediglich ein Feld für den Extension-Key und einige Stichpunkte mit anliegendem Plus-Zeichen sind zu sehen.
Widmen wir uns zuerst dem Eingabefeld. Hier muss für jede neue Extension ein eindeutiger Name, der sogenannte Extension-Key definiert werden. Dieser kann bei einer lokalen Extension beliebig gewählt werden. Sollte sie jedoch veröffentlicht werden muss über den Link unter dem Eingabefeld ein Key registriert werden.
Wir wählen den Namen „imtools“ und beginnen nun mit der Konfiguration unserer Extension.
Zuerst klicken Sie auf das Plus-Zeichen neben „General info“. Im nun angezeigten Formular vergeben Sie einen Titel und eine Beschreibung. Als Kategorie eignet sich „Frontend Plugin“, da es sich bei unserer Extension um eine Frontendausgabe handelt. Anschließend befüllen Sie noch die Felder für Autor und E-Mail Adresse.
TYPO3 unterstützt momentan bereits eine Vielzahl Sprachen, davon sollten Sie Gebrauch machen. Klicken Sie dafür auf das Plus neben „Setup languages“ um das nächste Formular zu öffnen. Wählen Sie nun „German“ um die neue Extension nicht nur in Englisch, sondern auch in Deutsch anbieten zu können. Die verschiedensprachigen Versionen der Label werden innerhalb der Extensions in Form von XML-Dateien abgelegt.
Öffnen Sie nun das Formular für eine neue Tabelle „New Database Tables“. In dieser Tabelle werden später die Kommunikationsdienste in Form von Datensätzen gespeichert. Die Tabelle bekommt einen Namen und einen Titel in Englisch. Zusätzlich können Sie nun einen Titel in den Sprachen angeben, die im vorherigen Schritt ausgewählt wurden.
Betrachten wir nun die weiteren Optionen. Hier können Sie angeben, ob Datensätze nur als gelöscht markiert, oder physikalisch aus der Datenbank entfernt werden sollen und ob sie versteckt, lokalisiert oder versioniert werden können. Außerdem ist es möglich, weitere Felder zum zeitgesteuerten Anzeigen der Datensätze hinzuzufügen.
Wenn die Auflistung im Frontend sortierbar sein soll, wählen Sie die Option „Manual ordering of records“. Alle weiteren Konfigurationsmöglichkeiten lassen wir jetzt erstmal außer Acht und gehen direkt über zur Definition der Tabellen-Felder am Ende des Formulars.
Hier können Sie Tabellen-Felder anlegen. Es werden dabei automatisch die Eingabe- und Auswahlfelder des Formulars für die Datensatzpflege im Backend und die entsprechende Datenbanktabelle mit allen dafür benötigten Spalten erzeugt.
Legen Sie zuerst das Feld „Titel“ an, um die Kommunikationsdienste später benennen zu können. Dafür vergeben Sie den Feldnamen „title“ und einen Titel in den verschiedenen Sprachen. Da es sich bei dem Wert des Feldes um einen Text handeln wird, empfiehlt sich an dieser Stelle der Feldtyp „String input“.
Nach einem Klick auf „Update“ werden zusätzliche Attribute des Eingabefelds geöffnet, dies wird in der Abbildung dargestellt. Schauen wir sie uns im Detail an. Die Feldbreite und Anzahl Zeichen entscheiden über die Darstellung des Eingabefeldes und mit „Required“ kann festlegt werden, ob das Eingabefeld ausgefüllt werden muss, damit sich der Datensatz speichern lässt. Mit "Is Exclude-field" kann das Feld durch den Administrator mit begrenzten Sichtbarkeitsrechten belegt werden.
Auf die gleiche Weise erzeugen Sie nun noch weitere Felder für die Bezugsadresse, Lizenz, Version und weitere Informationen. Zu beachten ist allerdings, dass keiner der darüber gelisteten reservierten Feldnamen ein zweites Mal vergeben werden darf, da es sonst zu Konflikten kommt.
Im Anschluss vergeben Sie weiter oben im Formular noch ein „Label-field“, wählen Sie dafür das eben erzeugte Feld „title“.
Nachdem nun die Tabelle für die Kommunikationsdienste vorbereitet ist, erstellen wir jetzt einen Datensatz, der diese im Frontend, in Form einer Listen- und Detailansicht, ausgibt. Dazu öffnen Sie das Formular für ein neues Frontend Plugin. Hier vergeben Sie einen Titel und wählen aus den Einbindungsmöglichkeiten für das Plugin den Eintrag in der „Insert plugin“-Liste. Zusätzlich können Sie, wie in der Abbildung zu sehen, ein eigenes Symbol im „Neuer Datensatz“-Assistent hinzufügen. Anschließend bestätigen Sie die Auswahl durch einen Klick auf „Update“ am Ende des Formulars.
Damit ist die Grundstruktur unserer Erweiterung fertig. Betrachten Sie nun das Ergebnis, indem Sie auf Button „View result“ klicken. Unterhalb der nun angezeigten Dateiliste werden die wichtigsten davon bereits angezeigt, wir schauen sie uns jedoch erst später im Detail an.
Schreiben Sie nun die Extension in das Dateisystem indem Sie auf „Write“ klicken. Es erscheint eine Meldung, die Sie genau lesen sollten.
Der Kickstarter ist kein Editor, sondern dient rein dem Anlegen der Grundstruktur!
Dieser Hinweis ist wichtig, denn häufig passiert es, dass Einsteiger die eigene Extension noch mal mit dem Kickstarter bearbeiten und ärgern sich anschließend darüber, dass ihre Änderungen in den Dateien dadurch überschrieben wurden.
Wenn Sie nun auf „Install extension“ klicken, wird die neue Erweiterung ganz normal über den Extension-Manager installiert. Wie in der Abbildung dargestellt, wird im nächsten Dialog noch das SQL-Statement angezeigt, welches die neue Datenbanktabelle erstellt. Führen Sie dieses Update aus und betrachten Sie den neuen Eintrag in der Extensionliste.
Nachdem die Extension nun vorbereitet wurde, können wir dazu übergehen, die Frontendausgabe anzupassen. Jedoch sollten Sie vorher auf einer beliebigen Seiten einen Frontend-Datensatz der neuen Extension anlegen. Diese Seite wird dann zum Testen der Änderungen am PHP-Code unseres Plugins verwendet.
Wechseln Sie nun in das Dateisystem und öffnen Sie die Datei pi1/class.tx_imtools_pi1.php im Hauptverzeichnis der neuen Extension. Dieses Verzeichnis finden Sie im Extension-Verzeichnis unter ../typo3_src/typo3/typo3conf/ext/imtools/.
In der geöffneten Datei werden Sie feststellen, dass bereits einige Zeilen Code darin enthalten sind. Diese wurden durch den Kickstarter erstellt und stellen eine Grundkonfiguration dar. Da wir jedoch eine angepasste Listen- und Detailansicht unserer Kommunikationsdienste erhalten mochten, werden wir den Inhalt der Variable „$content“ anpassen.
Zuerst wird an dieser Stelle eine Datenbankabfrage benötigt, danach muss das Resultat ausgewertet und in eine HTML-Struktur geschrieben werden. Das stellt anschließend unsere Listenansicht dar. Zusätzlich werden wir noch eine exemplarische Detailansicht erstellen, welche nur einen Datensatz anzeigt.
Ersetzen Sie den Inhalt der Hauptmethode durch folgende Zeilen:
Die hier eingesetzten Methoden werden in Kapitel 6 im Detail beschrieben.
Wenn Sie nun die Datei speichern, im Backend ein paar Datensätze und das Plugin einrichten und Ihre Seite im Frontend betrachten, werden Sie feststellen, dass bereits beide Ansichten verfügbar sind.
TYPO3 bietet eine ganze Reihe an Methoden, auf die Entwickler zurückgreifen können. Einen Überblick darüber findet man in der Core-Api-Reference. Es wird empfohlen wenn möglich immer auf die TYPO3 eigenen Methoden zurückzugreifen, statt mit den gewohnten Funktionen zu arbeiten. Im folgenden werden Sie einige davon kennen lernen.
Nur durch die TYPO3-Methoden kann gewährleistet werden, dass das gesamte System mit allen Extensions einheitlich aufgebaut ist. Durch eigene Funktionen entstehen zum Beispiel Schwachstellen in der Sicherheit des Systems. Außerdem wird eine Änderung an einer TYPO3-Methode automatisch in allen Extensions übernommen, so können Bugs schnell behoben werden.
Zudem sollte bei der Extension-Entwicklung der vorgegebene Programmierstil eingehalten werden.
Jede Extension wird von der Klasse „tslib_pibase“ aus der Datei „../typo3_src/typo3/sysext/cms/tslib/class.tslib_pibase.php“ abgeleitet. Somit hat auch jede Datei Zugriff auf die darin enthaltenen Methoden. Das ist quasi die Grundausstattung eines Extension-Entwicklers.
Eine der Methoden ist folgende:
Sie sorgt dafür, dass die gesamte Ausgabe der neuen Extension mit einem DIV mit spezieller CSS-Klasse umschlossen wird. So ist die Unterscheidbarkeit der einzelnen Extensions im DOM (Dokument Object Model) gewährleistet. Das macht es zum Beispiel einfacher, nur die Ausgabe unserer Extension getrennt vom eigentlichen Inhalt per CSS (Cascading Style Sheets) zu stylen.
TYPO3 geht einen eigenen Weg um mit Datenbanktabellen zu kommunizieren. Alle Datenbank-Zugriffe werden durch eigene Methoden vom normalen SQL-Syntax abstrahiert. Dadurch kann sichergestellt werden, dass die Installation unter verschiedenen Datenbanksystemen (MySQL, Oracle, Postgres, ...) identisch funktioniert. Außerdem wird auch hier, wie überall in TYPO3, der Fokus auf die Sicherheit und Erweiterbarkeit des Systems und des Internetauftritts gelegt. Denn bei eigenen SQL-Statements und Datenbankverbindungen kann nicht sichergestellt werden, dass diese konsistent vor SQL-Injection schützen.
Zum Beispiel werden mit den TYPO3-Methoden Datensätze heraus gefiltert, die im Backend als versteckt markiert wurden, oder deren Anzeigezyklus abgelaufen ist. Des Weiteren werden Datensätze von TYPO3 selten wirklich gelöscht, sondern nur als gelöscht markiert. Dadurch ist es möglich diese über eine Historie wiederherstellen. Auch diese Datensätze werden aus der Ergebnismenge entfernt. Dies wird erreicht, indem man die folgende Methode zur „WHERE“-Bedingung des Statements hinzufügt:
Es werden für jeden erdenklichen Fall Methoden zur Verfügung gestellt. So wird es dem Entwickler leicht gemacht, Datensätze auszulesen, anzulegen, oder zu löschen. Hier ein Beispiel eines SELECT-Statements:
Grundsätzlich werden in TYPO3 Beziehungen von Datensätzen zu anderen Tabellen über Komma-Separierte Listen in einem Tabellenfeld realisiert. Erst seit Kurzem werden echte m-zu-m-Beziehungen unterstützt. Dazu wurden sogar eigens neue Methoden erstellt. Allerdings wird diese Technik von Extensions bisher nur vereinzelt wirklich eingesetzt.
Für Referenzierungen untereinander gibt es seit der Version 4 von TYPO3 eine neue Tabelle. So kann man direkt an einem Datensatz sehen, wie viele und welche Elemente der Website auf diesen referenzieren. Nehmen wir zum Beispiel eine Detailseite von News (tt_news), die von mehreren Listenansichten als gemeinsame Detailseite genutzt wird. Dank der neuen Tabelle kann man aus den Infos der Detailansicht herausfinden, wie viele Listenansichten die aktuelle Seite als Detailansicht nutzen. Außerdem wird dadurch eine Meldung ausgegeben, wenn man einen referenzierten Datensatz löschen möchte.
Links werden in TYPO3 durch die Typolink-Methode erstellt. Dies hat den Vorteil, dass alle Links identisch behandelt werden. So ist es zum Beispiel möglich, auf einen Schlag allen Links ein zusätzliches Attribut hinzuzufügen, egal, ob die Links im TypoScript, oder durch eine Extension erstellt wurden.
Die Methode erwartet mindestens das Ziel des Links und erzeugt daraus bereits einen vollwertigen Link, mit „title“ und, je nach Ziel, einem passenden „target“. Bei dem Ziel darf es sich natürlich auch um die ID einer Seite im Seitenbaum, oder eine E-Mail Adresse handeln.
Gibt man der Methode als weitere Anweisung den Befehl, dass sie die vorhergehende URL zurück geben soll, so erhält man nur die URL ohne A-Tag.
Ein Aufruf der TypoLink-Methode gestaltet sich wie folgt:
Vereinfacht kann man einen Link auf interne Seiten auch mit den folgenden Methoden erstellen:
Wie bereits zu Beginn des Dokuments im Kapitel 4.1 beschrieben, unterstützt TYPO3 eine ganze Reihe verschiedener Sprachen. Die Label jeder einzelnen Sprache werden in XML-Dateien hinterlegt. Darin enthalten ist immer ein Standard-Fallback und für jede Sprache ein eigener Bereich. Der Kickstarter legt für unsere Extension drei Sprachdateien an:
Letztere enthält alle Label, die unser Frontend-Plugin für die Darstellung benötigt. Die beiden anderen enthaltenen hingegen alle, im Backend relevanten Label. Generell ist es nicht notwendig, drei oder mehr Sprachdateien zu nutzen, so kann man dies auf zwei Dateien reduzieren, eine für das Frontend und eine für das Backend. Jedoch ist darauf zu achten, dass diese Dateien richtig eingebunden werden.
Um im Frontend-Plugin mehrsprachige Label nutzen zu können, müssen sie erst aus der XML-Datei in einen Array geladen werden. Dies geschieht über einen Funktionsaufruf am Anfang der Hauptmethode:
Für unsere Extension ist es nun möglich, im TypoScript eine Konfiguration zu erstellen. Diese lässt sich anschließend im PHP-Code auslesen und verarbeiten. Hierfür stehen eine Vielzahl Methoden zur Verfügung. Das TypoScript wird beim Aufruf unserer Hauptmethode als Parameter „$conf“ übergeben.
Folgendes TypoScript...
...wird in dieser Form in den Konfigurationsarray unserer Klasse geschrieben:
Sie können jetzt folgendermaßen darauf zugreifen (achten Sie auf den Punkt):
Um nun nicht jeden Wert einzeln auslesen zu müssen, lässt man sich das TypoScript-Objekt (TEXT) am Besten mit folgendem Aufruf interpretieren:
Templates sind in TYPO3 HTML-Dateien. Diese werden durch sogenannte Subparts in einzelne Bereiche unterteilt. So kann in der gleichen Datei ein Template für eine Listen- und eine Detailansicht untergebracht werden. Durch entsprechende Methoden wird anschließend das Template in unseren Plugin-Code geladen:
Nachdem wir nun den HTML-Code für unsere Listen- und Detailansicht haben, geht es damit weiter, dass wir die Marker ersetzen. Marker sind einfache Platzhalter im Template. Diese werden durch folge Methode ersetzt:
Das Listen-Template gefüllt mit den oben genannten Markern sieht dann wie folgt aus:
Nehmen wir nun noch einmal unser Code-Beispiel aus Kapitel 5 zur Hand. Hier wird die gesamte Ausgabe im PHP-Code der Extension definiert. Was aber, wenn die Kommunikationsdienste nun nicht mehr in Form einer Tabelle, sondern in einer unsortierten Liste (UL) ausgegeben werden sollen? In diesem Fall müsste der PHP-Code angepasst werden. Das ist umständlich und zeitaufwändig.
Daher ändern wir im Folgenden die Hauptmethode um ein HTML-Template nutzen zu können. Legen Sie dafür ein neues Verzeichnis namens „res“ im Hauptverzeichnis der Extension an. Erstellen Sie dort eine Datei namens „template.html“ und fügen Sie folgenden Inhalt ein:
Öffnen Sie nun Datei pi1/class.tx_imtools_pi1.php im Hauptverzeichnis der neuen Extension und ersetzen Sie die Hauptmethode durch folgende Zeilen:
Wenn Sie sich nun das Ergebnis im Frontend ansehen, werden Sie feststellen, dass die Ausgabe der vorherigen recht ähnlich sieht, allerdings auf ein paar wenige Spalten reduziert wurde. Erweitern wir unsere Datenbank-Tabelle nun um eine Spalte, so wird diese nicht direkt im Frontend dargestellt, sondern muss erst per Hand im Template definiert werden.
Jede Extension sollte eine Schnittstelle zum Überschreiben von vorhanden oder hinzufügen von neuen Methoden besitzen. Am Besten jede die gleiche. Daher sind in fast jeder Extension die folgenden Zeilen in der Plugin-Datei zu finden:
Diese Zeilen erlauben die Anwendung der XCLASS-Methode und sollten gewissenhaft gepflegt werden.
Beim TCA (Table Configuration Array) handelt es sich um das Herzstück von TYPO3. Er enthält den gesamten Aufbau der Datenbanktabellen, ihrer Beziehungen untereinander und Informationen über die Darstellung der Tabellenfelder in Backend-Formularen. Fast das gesamte Backend ist mit diesem Array verbunden. Selbst die Art und Weise, wie Seiten und Datensätze im Backend angezeigt werden, ist im TCA hinterlegt.
Alle Extensions und deren Tabellenkonfiguration werden in diesen Array geladen und können entsprechend von anderen Extensions manipuliert werden. Dadurch ist eine hohe Flexibilität beim Erstellen von eigenen und beim Anpassen von anderen Extensions gegeben. Es besteht sogar die Möglichkeit, Änderungen direkt am Herzen von TYPO3 vorzunehmen, da TYPO3 selbst auch zum größten Teil durch Extensions im TCA vertreten ist. Diese Freiheit sollte von Entwicklern allerdings mit Bedacht genutzt werden.
Alle Anpassungen werden wieder aus dem TCA entladen, sobald man die entsprechende Erweiterung im Extension-Manager deaktiviert. Somit kann schnell Abhilfe geschaffen werden, wenn eine Fehlfunktion auftaucht. Sollte der Extension-Manager nicht mehr aufzurufen sein, muss die Erweiterung manuell aus der Extension-Liste in der localconf.php entfernt werden.
Für unsere Extension ist die komplette Konfiguration des TCA in den folgenden Dateien enthalten:
Hier werden nicht nur die einzelnen Tabellenfelder und ihre Darstellung im Backend-Formular definiert, sondern auch, wie die Datensätze in der Listenansicht des Backends aufgelistet werden, oder welche Buttons dabei zur Verfügung stehen.
Des Weiteren ist es möglich, eine Dynamik in die Darstellung der Felder zu integrieren. Sollen zum Beispiel nicht immer alle Felder gleichzeitig im Formular angezeigt werden, sondern jeweils nur ein Teil, je nach dem, welche Auswahl in einem Auswahlfeld getroffen wurde, so kann dies mit Hilfe von sogenannten „Types“ umgesetzt werden. Anwendung finden die Types, wie in der Abbildung zu sehen, zum Beispiel in der Auswahl des Inhaltstyps.
Der TCA wird automatisch im TYPO3-Cache vorgehalten und nicht jedes Mal neu erstellt. Dadurch werden Änderungen nicht automatisch sichtbar. Abhilfe schafft ein Leeren des gesamten Caches.
ext_emconf.php
Diese Datei enthält die Konfiguration für die Anzeige im Extension-Manager. Konfigurierbar sind hier unter Anderem Titel, Kategorie, Autor und Abhängigkeiten. Des Weiteren beinhaltet sie einen serialisierten Array mit einem MD5-Hash aller Extension-Dateien. Dieser erzeugt im Extension-Manger eine Liste der vom Original abweichenden Dateien. Das soll verhindern, dass die Erweiterungen unbemerkt verändert werden.
ext_localconf.php
Die ext_localconf.php erweitert die TYPO3 eigene localconf.php. Hier können Anpassungen der Extension-, System-, Backend- und Frontendkonfiguration vorgenommen sowie Hooks und XCLASS-Methoden definiert werden.
ext_tables.php
Mit Hilfe dieser Datei kann der globale Tabellenkonfigurations-Array (TCA) manipuliert werden. Hier wird das Backend-Formular der Extension mit den Spalten der Datenbanktabelle verknüpft. Außerdem ist es zum Beispiel möglich den Backend-Formularen anderer Extensions neue Eingabefelder hinzuzufügen.
ext_tables.sql
Die SQL-Statements in dieser Datei werden von TYPO3 interpretiert und in der Datenbank umgesetzt. Somit werden CREATE-Statements nicht blind ausgeführt, sondern ausgewertet und im Falle einer vorhandenen Tabelle mit dieser zusammengeführt (ALTER). Im Beispiel unserer Extension wurde dadurch die neue Datenbanktabelle erstellt. Außerdem kann man so andere Tabellen erweitern. Nicht möglich ist es Tabellen oder Inhalte zu löschen oder neue Inhalte einzufügen.
tca.php
Die tca.php enthält die gesamte Konfiguration der Tabellenfelder unserer Extension und wird in der Datei ext_tables.php definiert.
pi1/class.tx_<extension-key>_pi1.php
In dieser Datei ist die Hauptmethode unserer Extension enthalten. Diese wird aufgerufen, wenn das Plugin im Frontend angezeigt wird. Sie erzeugt die gesamte Ausgabe und definiert, ob unser Plugin gecached werden soll, oder nicht.
pi1/class.tx_<extension-key>_pi1_wizicon.php
Hier wird unsere Extension der „Insert plugin“-Liste und dem „Neuer Datensatz“-Assistenten hinzugefügt. Außerdem wird für diesen Zweck ein Symbol definiert.
Extension-Entwicklung :
http://www.addison-wesley.de/main/main.asp?page=deutsch/bookdetails&ProductID=108830
TCA:
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.0.0/view/4/1/
TypoScript Reference:
http://typo3.org/documentation/document-library/core-documentation/doc_core_tsref/4.2.0/view/
Coding-Guidelines:
http://typo3.org/documentation/document-library/core-documentation/doc_core_cgl/4.1.0/view/
Hooks, XCLASS, Services
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/3/8/
TYPO3 Forum:
http://www.typo3.net/forum/
Core Api Documentation:
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.0.0/view/toc/0/
Funktionsreferenz:
http://typo3.org/fileadmin/typo3api-4.0.0/classes.html