Anzeige
Anzeige
UX & Design
Artikel merken

Teil 1: Extensions kennen lernen, Kickstarter lieben lernen: TYPO3-Extensions entwickeln

Extensions sind das Lebenselixier von TYPO3. Jeder kann TYPO3 mit Hilfe einer eigenen Extension anpassen oder erweitern – und das ist gar nicht so schwer. Diese dreiteilige Artikelserie bietet einen Einstieg in die Programmierung eigener Extensions. Teil 1 bringt Ihnen den Kickstarter anhand einer Extension zur Verwaltung von Projektreferenzen näher.

12 Min. Lesezeit
Anzeige
Anzeige

Teil 2 (T3N Nr. 11) Analyse des Aufbaus und Inhalts von Extensions
Teil 3 (T3N Nr. 12) TYPO3-API für die eigene Programmierung richtig einsetzen

Um eine eigene Extension zu schreiben und diese anderen im TYPO3 Extension Repository (TER) verfügbar zu machen, sind drei Dinge notwendig: Sie müssen sich für einen passenden Namen und einen Extension Key entscheiden, Sie müssen das Grundgerüst der Extension anlegen und in TYPO3 einbinden (dabei hilft Ihnen der Kickstarter) und Sie müssen die benötigte Logik in die Extension einbauen. Dies ist in der Regel die größte Herausforderung beim Entwickeln einer Extension.

Extension Key

Anzeige
Anzeige

Der so genannte Extension Key ist ein Kurzname und besteht aus einerZeichenkette, die die Extension eindeutig identifiziert. Er dient als Schlüssel, der Ihre Extension und alle dazugehörigen Datenbanktabellen, Tabellenfelder, Frontend-Plugins, Backend-Module und PHP-Klassen eindeutig identifiziert. Dadurch sind Namensüberschneidungen und daraus resultierende Probleme ausgeschlossen, was bei weltweit verstreuten, oft unabhängig voneinander agierenden Entwicklern extrem wichtig ist. Auch derOrdner, in dem Ihre Extension im Dateisystem liegt, trägt den Namen des Extension Keys.

Falls Sie schon einen guten Namen für Ihre Extension haben und Sie sich diesen Namen für die spätere Veröffentlichung im TER sichern wollen, können Sie dies unkompliziert auf typo3.org [1] durchführen.

Anzeige
Anzeige

Physischer Speicherort der Extension

TYPO3 besitzt drei verschiedene Bereiche für die physische Speicherung von Extensions und aller zugehörigen Dateien. Im Bereich des TYPO3-Core liegen die System-Extensions (typo3/sysext) und eventuelle globale Extensions (typo3/ext). Beide Bereiche stehen allen TYPO3-Instanzen zur Verfügung, die auf dieses Core-Paket zugreifen.

Anzeige
Anzeige

Die meisten Erweiterungen aus dem TER werden als lokale Extensions im Ordner „typo3conf/ext/“ abgelegt und von dort aus eingebunden. Dort abgelegte Extensions werden mit höchster Priorität behandelt, sie überschreiben also eventuell vorhandene Extensions aus dem Core, die denselben Namen tragen.

Extension „Kickstarter“

Der Kickstarter selbst ist ebenfalls eine Extension, muss also zunächst aus dem TER importiert und anschließend installiert werden. Selbst für Anfänger mit wenigen Vorkenntnissen erschließt sich die Funktionsweise der einzelnen Bereiche des Kickstarters sehr schnell – in wenigen Schritten klicken Sie sich so eine funktionierende Extension zusammen. Als Entwickler müssen Sie sich nur noch um die Implementierung der gewünschten Funktionalität kümmern, die Einbindung in TYPO3 erledigt sich fast von alleine.

Anzeige
Anzeige

Bevor Sie anfangen, die Grundstruktur der Extension im Kickstarter zusammenzustellen, sollten Sie sich überlegen, was Sie mit Ihrer Extension bezwecken und welche Bestandteile dafür benötigt werden.

Die Screenshots sind bei der Erstellung einer einfachen Extension (abz_references) entstanden. Die Datei finden Sie auf der Heft-CD und auf der T3N-Website über den Softlink am Ende des Artikels. Die Extension liefert eine einfache Übersicht über eigene Projektreferenzen in Form einer Listenansicht und einer Detailansicht.
Alle Einstellungen, die über den Kickstarter für die Extension vorgenommen werden, könnten Sie auch direkt in die entsprechenden Konfigurationsdateien schreiben. Der Kickstarter nimmt Ihnen diese aufwendige Arbeit jedoch ab.

Nach dem Speichern der erzeugten Extension können Sie jederzeit noch Anpassungen vornehmen. Falls Sie sich also einmal nicht sicher über ein Feld oder eine Vorgabe des Kickstarters sind, probieren Sie einfach aus, welches Ergebnis daraus entsteht. Solange Sie noch keine manuellen Änderungen in den vom Kickstarter erzeugten Dateien vorgenommen haben, können Sie Ihre Konfiguration mit dem Kickstarter jederzeit umstellen.

Anzeige
Anzeige

Allgemeine Informationen

Nachdem Sie im Extension Manager über den Menüpunkt „Make new extension“ eine neue Extension gestartet haben, sollten Sie zunächst die allgemeinen Informationen (General info) zur Extension angeben. Diese Daten sollen es anderen TYPO3-Benutzern ermöglichen, den Zweck Ihrer Extension schnell zu verstehen.

Besonderes Augenmerk sollten Sie hier auf die Liste der Abhängigkeiten (Dependencies) richten, hier müssen alle Extensions genannt sein, die für eine saubere Funktionsweise Ihrer Extension nötig sind. Dies wird bei der Installation der Extension von TYPO3 überprüft.

Verschiedene Sprachen vorsehen

Falls Sie bereits zum Zeitpunkt der Erstellung der Extension wissen, dass Sie im Backend verschiedene Sprachen (z. B. Deutsch und Englisch) für die Redakteure unterstützen wollen, sollten Sie diese Sprachen von vornherein über den Punkt „Setup languages“ anlegen. Dadurch können Sie später bei allen Bezeichnungen die verschiedenen Sprachen auf einen Rutsch anlegen. Gewöhnen Sie sich an, als Basissprache immer die TYPO3-Entwicklersprache Englisch zu benutzen und Deutsch als zusätzliche Sprache anzulegen. Das erleichtert die spätere Kommunikation mit anderen Entwicklern und schützt Sie vor Problemen mit deutschen Sonderzeichen.

Anzeige
Anzeige

Achtung: Die ab hier genannten Punkte des Kickstarters sind optional, Sie müssen also für Ihre Extension nicht jeden Punkt befüllen. Für ein Plugin im Frontend mit Listen- und Einzelansicht benötigen Sie lediglich eine eigene Datenbanktabelle und ein Frontend-Plugin, die anderen Punkte können Sie leer lassen.

Eigene Datenbanktabellen anlegen

Nun können Sie die notwendigen Datenbanktabellen und die enthaltenen Felder über den Menüpunkt „New Database Tables“ anlegen. Die Hauptarbeit liegt dabei im Anlegen der einzelnen Felder für die Datenbanktabelle. Aus Platzgründen kann hier nicht auf alle Optionen für die Tabelle eingegangen werden, Sie können jedoch über die (What is this?)-Links genauere Informationen erhalten.

Nach einem Klick auf den Update-Button wird das neu definierte Feld der Feldliste hinzugefügt und Sie können sich dem nächsten Feld zuwenden. Sie können nachträglich alle Angaben verändern, brauchen also keine Angst vor einer eventuellen Falscheingabe zu haben. Der Kickstarter bietet Ihnen eine ganze Reihe von Feldtypen zur Auswahl, die in TYPO3 bestimmte automatische Verhaltensweisen auslösen. Die möglichen Eingabefelder sind größtenteils selbsterklärend und mit einem kleinen Bildchen versehen, das die resultierende Funktionalität veranschaulicht. Wenn Sie sich nicht sicher sind, welcher Typ für Ihren Zweck der Richtige ist, probieren Sie einfach aus. Nach der Installation der Extension werden Sie in den zugehörigen Backend-Masken schnell sehen, ob alles passt. Zur Erinnerung: Solange Sie keine manuellen Änderungen an den durch den Kickstarter erzeugten Dateien vornehmen, können Sie auch im Nachhinein alle Einstellungen über den Kickstarter verändern.

Anzeige
Anzeige

Sie können für jedes Feld festlegen, ob es sich um ein „Exclude Field“ handeln soll. Ein „Exclude Field“ ist für einen normalen Redakteur nicht sichtbar, solange Sie es nicht explizit in der Benutzerverwaltung für seine Backend-Gruppe freischalten. Nutzen Sie diese Möglichkeit für Felder, die nicht grundsätzlich von allen Redakteuren bearbeitet werden sollen.

Eine ganze Reihe von Feldtypen können derzeit direkt über den Kickstarter angelegt werden. Sie beziehen sich auf die im TYPO3-Konfigurationsarray „$TCA“ möglichen Typen. Dabei werden im Kickstarter noch ein paar Varianten angeboten. Falls Sie sich bereits jetzt im Detail mit der ausführlichen Konfiguration der Feldtypen beschäftigen wollen, werden Sie in der Dokumentation zur TYPO3 Core API [2] fündig.

Bestehende Datenbanktabellen erweitern

Falls Sie eine bestehende Funktionalität von TYPO3 erweitern wollen, ist es durchaus möglich, dass Sie dazu eine bereits bestehende Datenbanktabelle um ein oder mehrere neue Felder erweitern müssen (Extend existing Tables). Wählen Sie die zu erweiternde Tabelle aus, die weitere Vorgehensweise entspricht der bei neuen Datenbanktabellen.

Anzeige
Anzeige

Im Vergleich zu neuen Tabellen gibt es bezüglich der Namen der Felder allerdings einen entscheidenden Unterschied: In einer bereits bestehenden Datenbanktabelle wird dem von Ihnen gewählten Namen eines neuen Felds automatisch die Kennung Ihrer Extension vorangestellt, also zum Beispiel „tx_myext_feldname“. Dadurch wird sichergestellt, dass es keine Namenskonflikte mit anderen Extensions gibt. Außerdem erleichtert diese Vorgehensweise, die Zusammenhänge in der Datenbank zu verstehen. Sie sehen so auf den ersten Blick, welche Extension welche Felder hinzugefügt hat. In Backend-Formularen werden die neuen Felder standardmäßig unten angefügt. Das Verhalten der Felder entspricht dem Verhalten von Feldern in Datensätzen neu angelegter Tabellen.

Frontend-Plugin erstellen

Ein Frontend-Plugin stellt eine neue Funktionalität für das Frontend bereit. Bekannte Beispiele sind ein Gästebuch, ein Forum oder ein Shop. Frontend-Plugins können auf verschiedene Wege ins Frontend eingebunden werden und erfüllen verschiedene Zwecke. Deswegen müssen Sie sich im Kickstarter für eine der zahlreichen Varianten entscheiden. Diese bestimmt jedoch nur den vom Kickstarter erzeugten vorläufigen Code. Sie können diese Variante jederzeit direkt im Code anpassen.

Damit Sie den Überblick bewahren, sind die einzelnen Optionen auf der Abbildung mit Ziffern versehen, die im Folgenden beschrieben werden:

Anzeige
Anzeige

1. Der Titel des Plugins wird später in der Auswahl der möglichen Plugins angezeigt. Falls Sie mehrere Sprachen über den Punkt „Setup Languages“ ermöglicht haben, können Sie diesen Text sprachabhängig eingeben.

2. Sie sollten mit Ihrem Plugin die Caching-Funktion von TYPO3 möglichst nutzen, um unnötige Serverlast zu vermeiden. Manchmal ist dies aus funktionalen Gründen jedoch nicht möglich oder nicht sinnvoll. Für diesen Fall sollten Sie den Haken in der Checkbox setzen, damit Ihr Plugin über TypoScript als USER_INT-Objekt gekennzeichnet wird. Sämtliche Ausgaben Ihres Plugins werden dann nicht mehr im Cache von TYPO3 zwischengespeichert.

3. Vorbereitetes TypoScript der Extension kann immer und überall eingebunden oder in ein statisches Template abgelegt werden, das vom Administrator dann nur in dem Teil des Seitenbaums eingebunden wird, in dem es benötigt wird.

4. Die meisten Plugins werden in die reguläre Liste der verfügbaren Plugins aufgenommen, so auch das in diesem Beispiel erstellte Plugin. Bei der Einbindung eines solchen Plugins in eine Seite wird ein Inhaltselement vom Typ „Plugin“ angelegt und anschließend das gewünschte Plugin ausgewählt. Zusätzlich zur Aufnahme in die reguläre Liste der Plugins kann das neue Plugin auch noch in die Auswahlmöglichkeit des Wizards „New content element“ eingefügt werden. Die Funktionsweise wird hiervon nicht berührt, es wird lediglich eine weitere Möglichkeit geschaffen, das Plugin auszuwählen. Entsprechend sollte hier eine möglichst aussagekräftige Beschreibung des Plugins gewählt werden. Falls Sie mehrere Sprachen über den Punkt „Setup Languages“ ermöglicht haben, können Sie diesen Text sprachabhängig eingeben. Ganz unscheinbar am Ende der Option können Sie hier sogar einen funktionierenden Code-Vorschlag für die Listen- und Einzelansicht der Datensätze einer Ihrer Tabellen erzeugen lassen.

5. Sie können Ihr Plugin auch der Liste des Inhaltselements „Textbox“
hinzufügen. Sie haben solch eine Textbox noch nie eingesetzt? Macht
nichts, der Autor auch nicht. Dieses Inhaltselement ist veraltet und wird
deshalb nicht näher besprochen.

6. Fügen Sie Ihr Plugin zur Liste im Inhaltselement „Sitemap“ hinzu, wenn
Sie damit eine Reihe von Links auf Seiten oder andere Elemente der
Webseite dynamisch erstellen, beispielsweise eine spezielle Art einer Sitemap.

7. Ein völlig neues Inhaltselement ist beispielsweise dann sinnvoll, wenn Ihre
Datensätze direkt auf einer Seite eingebunden werden können und im
Frontend angezeigt werden.

8. Ein neuer Typ einer Überschrift könnte beispielsweise ein dynamisch aus dem Überschriftentext erzeugter Button sein.

9. Mit einem benutzerdefinierten Tag ermöglichen Sie es Ihren
Redakteuren, im Backend Inhalte mit diesem Tag zu umfassen und damit
eine bestimmte von Ihnen programmierte, bisher nicht mögliche
Darstellung im Frontend zu erreichen.

10. Falls TYPO3 nur den Code Ihrer TypoScript-Bibliothek
integrieren soll, setzen Sie dieses Häkchen. Es wird eine
Beispiel-PHP-Klasse für die Darstellung im Frontend erzeugt. Die
Option „Provide TypoScript example for USER cObject in ‚page.1000’“
scheint bei der zur Drucklegung aktuellen Version des Kickstarters
(0.3.8) keine Funktion zu haben. Damit der Code Ihrer Extension
ausgeführt wird, fügen Sie die Zeile „page.1000 < plugin.tx_myext_pi1“ in das Setup-Feld eines
TypoScript-Templates ein. Den genauen Namen der PHP-Klasse finden Sie in der Datei „ext_localconf.php“ im Hauptverzeichnis Ihrer Extension.

Backend-Modul anlegen

Die Möglichkeiten des Kickstarters beim Anlegen eines Backend-Moduls sind im Vergleich zu einem Frontend-Plugin deutlich beschränkt, da es hier weniger Varianten der Einbindung gibt. Sie können entweder ein neues Hauptmodul oder ein neues Untermodul zu einem bestehenden Hauptmodul (etwa Tools) definieren. Die Maske im Kickstarter sollte selbsterklärend sein.

Interessant ist die Möglichkeit, Ihr Modul nur für Administratoren freizugeben. Für Benutzer mit dem Administrator-Attribut sind immer alle Module sichtbar, für redaktionelle Benutzer müssen Module erst freigegeben werden. Falls Sie Ihr Modul nur für Administratoren erstellen, haben diese keine Möglichkeit, das Modul für Redakteure freizugeben. Sie sollten diese Option wählen, wenn das Modul systemkritische Operationen durchführt und deshalb nie in den Einflussbereich von Redakteuren gelangen soll.

Bestehende Module erweitern

Zusätzliche Funktionen können nur zu Modulen hinzugefügt werden (Integrate in existing modules), falls diese dafür vorbereitet sind, also eine API dafür besitzen. Nur solche Module bekommen Sie hier zur Auswahl angeboten. Die im Kickstarter sichtbaren Grafiken veranschaulichen sehr gut, wo Ihr Modul nach der Installation auftauchen könnte.

Neue Elemente im Kontextmenü der Seiten

Eine sehr elegante Möglichkeit zur Platzierung von Zusatzfunktionalitäten ist das Kontextmenü (Clickmenu-items). Auch hier sollte die Grafik im Kickstarter selbsterklärend sein. Ein gutes Beispiel für neue Funktionalitäten im Kontextmenü ist die Extension „stfl_ptg“ von Wolfgang Klinger.

Neuen Service definieren

Services sind relativ neu in TYPO3, nichtsdestotrotz sind sie extrem nützlich. Informationen über das Konzept und die Funktionsweise von Services liefert die Dokumentation auf typo3.org [3].

Statischen TypoScript-Code einfügen

Über den Punkt „Static TypoScript Code“ können Sie statischen TypoScript-Code in die Bereiche „constants“ und „setup“ einfügen. Diese werden wie die Konfiguration eines statischen Templates abgelegt und können genauso im Backend als statisches Template eingebunden werden.

TSconfig hinzufügen

Auch für die Bereiche „User TSconfig“ und „Page TSconfig“ können Sie Konfigurationen angeben. Diese gelten für die gesamte Webseite und können durch Angaben in den TSconfig-Feldern im Seitenkopf beziehungsweise den Benutzer- oder Gruppendatensätzen überschrieben werden. Achtung: In den vom Autor getesteten Versionen des Kickstarters 0.3.7 und 0.3.8 wurden die hier angegebenen Informationen einfach ignoriert.

Extension-Dateien speichern

Für ein einfaches Plugin mit eigenen Datensätzen in List- und Single-View sollten Sie jetzt die Bereiche „General info“, „Setup languages“, „New Database Tables“ und „Frontend Plugins“ gefüllt haben. Nach einem Klick auf den Button „View result“ zeigt Ihnen der Kickstarter die Dateien an, die er erzeugen wird. Über die „View“-Links neben den einzelnen Dateien können Sie bereits einen Einblick erhalten, was der Kickstarter produzieren wird. Mit dem Button „WRITE“ weisen Sie den Kickstarter an, die tatsächlichen Dateien, also Ihre Extension, zu erzeugen und ins Dateisystem zu schreiben. Fürs erste sind Sie fertig!

Nun können Sie Ihre Extension ganz normal im Extension Manager installieren und das erzeugte Plugin auf einer Testseite einfügen. Falls Sie jetzt noch einmal mit dem Kickstarter Änderungen vornehmen wollen, können Sie dies, wie gehabt, über den Extension Manager tun.

Das Aussehen und, falls gewünscht, die Logik können Sie nun in der Datei „pi1/tx_myext_pi1.php“ anpassen. Ein über den Kickstarter erzeugtes Plugin basiert auf der Klasse „tslib_pibase“ (zu finden im Ordner „typo3/sysext/cms/tslib“). Im erzeugten Code werden bereits viele Methoden und Eigenschaften dieser Klasse verwendet, machen Sie sich also unbedingt damit vertraut.

Für die Programmierprofis unter Ihnen lohnt sich bereits jetzt ein Blick auf die erweiternde Extension „kickstarter__mvc“, mit deren Hilfe Plugins basierend auf dem zukunftsträchtigen Ansatz „lib/div“ [4] des Extension Coordination Teams erzeugt werden können.

Der nächste Teil der Artikelserie wird sich detailliert mit den resultierenden Dateien des Kickstarters und ihren Inhalten befassen. Sie werden erkennen, wo manuelle Änderungen ansetzen müssen, um das gewünschte Ergebnis für vorhandene Spezialanforderungen zu erzielen. Außerdem wird der Artikel die Basisklasse „tslib_pibase“ und ihr Zusammenspiel mit dem hier erstellten Plugin etwas genauer unter die Lupe nehmen.

Dieser Artikel ist ein Auszug aus: (mehr Infos siehe Buchvorstellungen auf Seite 19)
Titel: Das TYPO3-Profihandbuch. Der Leitfaden zu Front- und Backendprogrammierung
Autoren: Franz Ripfel, Melanie Meyer, Irene Höppner
Verlag/ISBN: Addison-Wesley/978-3827323224
URL: http://www.t3buch.de
Preis/Umfang: 49,90 EUR/550 Seiten, gebunden
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