TYPO3 extension programming mit extbase und fluid

Mit Phoenix wird sich in TYPO3, dank dem eigenst dafür entwickelten Framework FLOW3 und der bereitgestellten template engine Fluid, einiges ändern. Um auch heute schon zukunftssichere extensions programmieren zu können wurde extbase bereitgestellt - ein aufwändiger backport aus FLOW3.
Extbase lehnt gleich an mehrere moderne Architekturmuster wie MVC und DDD an und bietet somit klare Strukturierung und bessere Skalierbarkeit für extensions. Wer sich bei der Erstellung der dadurch anfallenden, komplexeren Verzeichnisstruktur etwas Arbeit ersparen möchte, kann alternativ zur manuellen Methode auf den Extension Builder zurückgreifen.
Nach erfolgreicher Grundkonfiguration gehen wir also von folgender Verzeichnisstruktur innerhalb des “typo3conf/ext/myExt/” directory aus:
Classes
Controller
Domain
ViewHelpers
Configuration
FlexForms
TCA
TypoScript
Resources
Private
Templates
Public
ext_emconf.php
Um TYPO3 mit unserer extension bekannt zu machen erstellen wir zunächst die “ext_emconf.php” beispielhaft wie folgt:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $EM_CONF[$_EXTKEY] = array( 'title' => 'casestudies', 'description' => 'Referenzen', 'category' => 'plugin', 'author' => 'Christopher Orth', 'author_email' => 'christopher.orth@dotfly.de', 'author_company' => 'dotfly', 'dependencies' => 'extbase,fluid', 'clearCacheOnLoad' => 1, 'state' => 'alpha', 'version' => '0.0.0', ); |
ext_localconf.php
Viel interessanter ist nun, was mit extbase in der “ext_localconf.php” passiert. Normalerweise musste das Plugin über die Methode “addPItoST43()” der Klasse “t3lib_extMgm” registriert werden. addPItoST43 ist auch eine der vielen Methoden, bei der man lange rätseln kann um deren kryptische Namensgebung zu entschlüsseln. Hier hilft ein Blick in die source code documentation, wobei die 43 für die uid des static templates “content.default” steht. Schauen wir uns nun an, wie wir unser Plugin in extbase registrieren:
1 2 3 4 5 6 7 8 9 10 11 | <?php if (!defined ('TYPO3_MODE')) die ('Access denied.'); Tx_Extbase_Utility_Extension::configurePlugin( $_EXTKEY, 'Pi1', array( 'Overview' => 'index', ) ); |
Der erste Parameter der “configurePlugin()” Methode erwartet den extension key, der zweite den eindeutigen Namen unseres Plugins in UpperCamelCase. Als dritter Parameter wird ein Array mit den controller-action-combinations übergeben. Dieses Array definiert in welcher Reihenfolge Controller und deren Actions aufgerufen werden sollen. Wir würden mit dieser Angabe also aus dem “Overview” Controller die Action “index” aufrufen.
OverviewController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php class Tx_Casestudies_Controller_OverviewController extends Tx_Extbase_MVC_Controller_ActionController { public function indexAction() { $this->view->assign('aCaseStudies', $this->_getCaseStudies()); } protected function _getCaseStudies() { ... } } |
View
Im Verzeichnis “Resources/Private/Templates/Overview/” wird nun das entsprechende View der aufgerufenen “index” Action erwartet. Das Template muss analog zur Action benannt werden, heißt in diesem Fall also “index.html”. Im View selber stehen bereits einige Helper zur Verfügung, die die Verarbeitung von komplexen Arrays und Objekten vereinfachen.
1 2 3 | <f:for each="aTest" as="foo">
foo
</f:for> |
Jedem, der sich intensiv mit der Entwicklung von Extensions unter extbase und Fluid beschäftigen möchte, kann ich die O’Reilly Ausgabe “Zukunftssichere TYPO3-Extensions mit Extbase und Fluid” von Jochen Rau und Sebastian Kurfürst empfehlen.
0 Kommentare