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