Das könnte dich auch interessieren

Du hast deinen AdBlocker an?

Es wäre ein Traum, wenn du ihn für t3n.de deaktivierst. Wir zeigen dir gerne, wie das geht. Und natürlich erklären wir dir auch, warum uns das so wichtig ist. Digitales High-five, deine t3n-Redaktion

t3n 18

Praxis-Workshop für Einsteiger: Extension-Entwicklung mit Extbase und Fluid

Die grundlegendsten Neuerungen in TYPO3 4.3 sind sicherlich das MVC-Framework Extbase und die Template-Engine Fluid. Doch diese können nicht einfach im Backend per Checkbox aktiviert werden, sondern sie stellen sehr komplexe Konzepte dar, die zudem auch noch vom zukünftigen TYPO3-Technologie-Träger FLOW3 zurückportiert wurden. Doch keine Angst – ein einfacher Einstieg ist auch hier möglich. Wir zeigen, wie es geht.

Auch wenn Extbase und Fluid gerade in aller Munde sind, ist es wie bei jeder neuen Technologie schwierig, einen einfachen Einstieg in die Thematik zu finden. Das liegt weniger an den beiden Newcomern selbst, sondern eher daran, dass noch wenig Literatur existiert und es Einsteigern oft nicht leicht fällt, sich durch die bereits bestehenden Beispiele zu hangeln. Grund genug für diesen ausführlichen Workshop.

Was sind Extbase und Fluid genau?

In t3n Nr. 16 hat Extbase-Entwickler Jochen Rau ausführlich erklärt, welche Rolle Extbase spielt und warum man es verwenden sollte [1].

Extbase ist zunächst eine ganz normale Systemextension, die als Alternative zur herkömmlichen Extension-Programmierung mittels Erweiterung der tslib_pibase-Klasse verwendet werden kann. Gerne auch parallel, denn Extbase verträgt sich prima mit klassischen Extensions. Extbase führt dabei unter anderem solch schwergewichtige Konzepte wie Domain Driven Design und das MVC-Pattern ein. Damit ist es möglich, sehr elegant auch komplexe Erweiterungen zu schreiben, die sich leicht erweitern lassen. Darüber hinaus – und genau das wird einer der Hauptgründe für die Verwendung sein – werden sich solche Extensions leicht in die zukünftige TYPO3-Version 5.0 migrieren lassen.

Fluid, entwickelt von Core-Developer Sebastian Kurfürst, übernimmt dabei die Aufgabe einer Template-Engine und ist für alle Ein- und Ausgaben zuständig. Auch Fluid ist dabei eine neue Systemextension und kann bei Bedarf gegen eine andere Templating-Engine ausgetauscht werden. Einen ausführlichen Einblick in Fluid liefert ein Artikel in t3n Nr. 16 [2].

Es geht los

Um nun mit Extbase und Fluid loslegen zu können, brauchen Sie eine Installation von TYPO3 4.3 (stable oder beta2). Im Extension-Manager müssen Sie nun noch die beiden Systemextensions Extbase und Fluid installieren, da diese per Default zwar mitgeliefert, aber noch nicht installiert sind. Nun brauchen Sie noch eine Seite im Seitenbaum, bei der Sie sicherstellen müssen, dass Inhalte darauf ausgegeben werden können. Dazu reicht das Aktivieren von „css_styled_content“ und das folgende TypoScript:

Minimales Setup

page = PAGE
page.10 < styles.content.get

Listing 1

Als nächstes installieren Sie die Extension „efempty“ aus dem TER und platzieren diese auf der vorher angelegten Seite. Wenn Sie nun den Cache leeren und die Seite im Frontend laden, sollten Sie „Hello World!“ lesen können. Wenn dies bei Ihnen der Fall ist, sind Extbase und Fluid ordnungsgemäß installiert und grundsätzlich einsatzfähig.

Die Extension „efempty“ (als Abkürzung für „Extbase Fluid Empty“) ist dabei ein leerer Container, der die minimale Konfiguration enthält, die für den Betrieb der Extension im Zusammenspiel mit Extbase und Fluid notwendig ist. Sie können damit beispielsweise mit Fluid experimentieren, ohne auf Extbase achten zu müssen oder die Extension einfach Datei für Datei erkunden, um zu sehen, wie das Zusammenspiel der Dateien funktioniert.

In diesem Workshop werden Sie allerdings eine neue Extension manuell aufbauen, um alle wichtigen Bereiche kennenzulernen.

Extension: „guestbook“

Ihre eigene Extbase-Extension soll ein sehr einfaches Gästebuch realisieren. Diese soll eine Liste von Gästebucheinträgen anzeigen und jedem die Möglichkeit bieten, eigene Einträge hinzuzufügen. Ein Gästebucheintrag hat dabei einen Titel, einen Text und natürlich ein Datum.

Wenn man den Paradigmen des Domain Driven Design folgt, dann ist der Eintrag (Englisch: Entry) eine Entity mit den Eigenschaften „Title,“ „Text“ und „Date“. Eine Entity ist dabei ein eigenes Objekt mit einer Identität – das heißt die Einträge unterscheiden sich, auch wenn diese den selben Inhalt haben sollten. Dafür werden wir gleich noch eine eigene Klasse benötigen. Vorher aber zum prinzipiellen Ablauf. Im MVC-Paradigma brauchen Sie einen Controller, der die so genannten Aktionen (Actions) verwaltet. Sie benötigen zwei offensichtliche Actions – eine, um das Gästebuch anzuzeigen (diese nennen wir index), dann eine Action, um das Formular anzuzeigen, mit dem man neue Einträge hinzufügen kann (add) und eine Action, die den Eintrag dann tatsächlich in die Datenbank schreibt (create).

Convention over Configuration

Innerhalb der Programmierung mittels Extbase und Fluid gibt es sehr viele Konventionen (Vereinbarungen) in Bezug auf Benennungen, beispielsweise von Dateiklassen oder Verzeichnisnamen. Das mag anfangs verwirren, weil man nicht genau weiß, warum und wie etwas festgelegt wurde – hat man das System aber einmal verinnerlicht, so hilft es einem enorm, wenn es darum geht, sich im Code zurechtzufinden. Die Konventionen helfen aber nicht nur dem Programmierer, sondern auch Extbase selbst, da Extbase automatisch bestimmte Funktionen ausführen kann, selbst wenn diese vorher nicht definiert wurden.

Links und Literatur

  1. t3n Nr. 16, Die Zukunft der…
  2. t3n Nr. 16, Fluid – Templating…
  3. Extbase-Forge
  4. Podcasts
  5. Fluid-Vortrag

Finde einen Job, den du liebst zum Thema TYPO3, PHP

Alle Jobs zum Thema TYPO3, PHP
11 Reaktionen
Christian
Christian

Habe jetzt alle möglichen Cache-Tabellen geleert. Letztendlich hat aber geholfen, die Seite mit dem Plugin zu löschen und eine neue Seite mit neu eingebundenen Plugin anzulegen.

Antworten
Sebastian Böttger

Das kann natürlich viele Gründe habe - wenn immer nur die Liste der Einträge kommt, fehlt wahrscheinlich der Eintrag in der ext_localconf.php oder der Link wurde falsch generiert. Zudem ist das Caching bei Extbase sehr intensiv - daher am Besten einmal alle Cache-Tabellen händisch leeren (inbesondere den Extbase Reflection Cache). Eventuell arbeitet das Beispiel auch nicht mehr mit der aktuellen Version 1.3 von Extbase/Fluid zusammen - das habe ich noch nicht ausporbiert...

Antworten
Christian
Christian

Woran kann es liegen das die Action "Add" nicht mehr aufgerufen wird? Zwischenzeitlich hatte es funktioniert, dann hab ich's anscheinend verbogen. Hab die Extension per Copy&Paste noch einmal aufgebaut, aber die Action, bzw. das Formular wird nicht angezeigt.

Antworten
Eddy
Eddy

Nach anfänglicher Tipparbeit habe ich mich nun entschlossen, den Code per Copy&Pace zu verwenden. Uns siehe da, es tut. (So kann man natürlich auch Zeit tot machen :-) )
Wahrscheinlich irgendwo ein Synthaxfehler.

Antworten
Eddy
Eddy

Leider bekomme ich die Geschichte nicht zum Laufen. Nach der Installation des Plugins wird beim Seitenaufruf folgender Fehler ausgeworfen:

#1247602160: Table 'extbase.tx_guestbook_domain_model_entry' doesn't exist

Der Code in der ext_tables.sql ist korrekt. Merkwürdig ist jedoch, das im Extension Manager, bei Klick auf Guestbook, eine Aktualisierung der entsprechenden Tabelle gefordert wird. Nach Durchführung der Aktualisierung erscheint jedoch wieder die o.a. Fehlermeldung und der Extension Manager möchte wiederum eine Aktualisierung der Tabelle.

Habe ich etwas übersehen?

Antworten
sieby
sieby

Hallo,

bei mir taucht das Problem auf, dass die Controller-Datei doppelt aufgerufen wird, was zur folge hat das die Klasse doppelt erzeugt wird.

Habe die Listings von der Website kopiert und von daher kann sich da kein Fehler eingeschlichen haben.

Kann mir vllt. Jemand sagen wodurch dieses Problem entsteht?

Antworten
hauke
hauke

Hab das Problem gelöst. Ich benutzte das Typo3Winstaller 4.3.1-Packet und da ist der PHP-Cache eAccelerator eingeschaltet und ich denke der schneidet die PHP-Komentare ab. Wenn man das Caching des eAccelerator abschaltet, funktioniert alles wie es soll...

hauke

Antworten
Sebastian Böttger

Hi Waldo,

einfach das Plugin als Content-Element auf einer Seite einbinden - das reicht.

Patrick

Antworten
Sebastian Böttger

Hi Hauke,

bitte schaue nochmal komplett über den Code und achte besonders darauf, dass Du ALLE Kommentare mit angegeben hast. Das ist die klassische Fehlermeldung, wenn Extbase den Typ nicht erkennen kann und diesen zieht sich Extbase aus den Annotations.

Patrick

Antworten
hauke
hauke

Also bei mir tut's das nicht, wenn ich einen Eintrag speichern will kommt die Fehlermeldung:

#1251730702: The value must be of type "Tx_Guestbook_Domain_Model_Entry", but was of type "array".

Antworten
Waldo
Waldo

Prima tut. Aber fehlt da nicht noch ein TS für das Einbinden des Plugins ?

Antworten

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

Abbrechen