TYPO3-Extensions entwickeln

Transcrição

TYPO3-Extensions entwickeln
LESEPROBE
Franz Ripfel
TYPO3-Extensions entwickeln
Teil 1: Extensions kennen lernen, Kickstarter lieben lernen
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.
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
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.
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 CorePaket zugreifen.
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.
Der Extension Manager zeigt die physikalische Herkunft der Extension und
entstandene Prioritäten an. Die Extension „automaketemplate“ ist lokal und
global verfügbar, im Falle einer Installation wird die lokale Version eingebunden.
1
Der Kickstarter lässt sich im TYPO3-Backend mit wenigen Klicks und ohne besondere Einstellungen installieren.
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.
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
Nach der Installation haben Sie im
Übersicht über eigene ProjektExtension Manager die Möglichkeit,
referenzen in Form einer Lisneue eigene Extensions zu erstellen.
tenansicht 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.
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 Exten-
© yeebase 2007. Veröffentlichung und Vervielfältigung nur mit Genehmigung der yeebase GbR. t3n.yeebase.com
LESEPROBE
sion angeben. Diese Daten sollen es anderen TYPO3-Benutzern
ermöglichen, den Zweck Ihrer Extension schnell zu verstehen.
Die allgemeinen Informationen haben noch keine Auswirkung auf die Funktionsweise, liefern aber wichtige Informationen über die Extension.
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.
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.
Sie können für jede Tabelle alle gewünschten Felder mit den jeweils nötigen
Feldtypen anlegen.
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 BackendMasken 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.
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
Sie werden Ihre Tabelle später ohne
im TYPO3-Konfigurationsarray
weitere nötige Arbeiten als neuen
„$TCA“ möglichen Typen. Damöglichen Datensatz im Backend
finden. Das komplette Handling wie
bei werden im Kickstarter noch
„neu anlegen“, „speichern“, usw.
ein paar Varianten angeboten.
wird automatisch von TYPO3 gereFalls Sie sich bereits jetzt im
gelt.
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.
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.
Eigene Datenbanktabellen anlegen
Frontend-Plugin erstellen
Nun können Sie die notwendigen Datenbanktabellen und die
enthaltenen Felder über den Menüpunkt „New Database Tables“
Ein Frontend-Plugin stellt eine neue Funktionalität für das Frontend bereit. Bekannte Beispiele sind ein Gästebuch, ein Forum oder
© yeebase 2007. Veröffentlichung und Vervielfältigung nur mit Genehmigung der yeebase GbR. t3n.yeebase.com
2
LESEPROBE
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.
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.
Durch die Auswahl der gewünschten Tabelle wird später vom Kickstarter direkt
eine funktionierende Listen- und Einzelansicht für das Frontend erzeugt.
Der Kickstarter bietet verschiedene Varianten für ein neues Plugin an.
Damit Sie den Überblick bewahren, sind die einzelnen Optionen
auf der Abbildung mit Ziffern versehen, die im Folgenden beschrieben werden:
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_INTObjekt 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
3
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 BeispielPHP-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 BackendModuls 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.
© yeebase 2007. Veröffentlichung und Vervielfältigung nur mit Genehmigung der yeebase GbR. t3n.yeebase.com
LESEPROBE
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.
Ä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/
Die neue Extension ist
tx_myext_pi1.php“ anpassen. Ein über
mit einem Klick instalden Kickstarter erzeugtes Plugin basiert
liert.
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.
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 Listund 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
Ist der Kickstarter installiert, bietet der Extension Manager zu jeder Extension
die Option „Edit in Kickstarter“, was jedoch nicht von jeder Extension unterstützt wird.
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
Links und Literatur
[1]
[2]
[3]
[4]
Softlink 1874
Extension-Keys: http://typo3.org/extensions/extension-keys/
TYPO3 Core API: http://typo3.org/documentation/documentlibrary/core-documentation/doc_core_api/4.1.0/view/4/1/
Services: http://typo3.org/documentation/document-library/
core-documentation/doc_core_services/0.2.0/view/
MVC Framework: http://wiki.typo3.org/index.php/
MVC_Framework
DER AUTOR
Franz Ripfel befasst sich seit 2003 mit
TYPO3 und ist Schritt für Schritt immer
tiefer eingestiegen. Er ist Mitbegründer
der A.BE.ZET GmbH in München
(www.abezet.de), die auf Lösungen für Inter- und Intranet basierend auf TYPO3
spezialisiert ist. Dort leitet er derzeit die
Entwicklungsabteilung und ist oft in Sachen Schulungen und Coaching unterwegs.
© yeebase 2007. Veröffentlichung und Vervielfältigung nur mit Genehmigung der yeebase GbR. t3n.yeebase.com
4

Documentos relacionados