Fluid ist die moderne und intuitive Templating Engine für FLOW3 und Extbase. Der Vortrag betrachtet den aktuellen Stand inkl. Basiskonzepte, ViewHelper, FLUIDTEMPLATE, Fluid Standalone View und Widgets.
Extreme Fluid - Status Quo der modernen Templating Engine
1. EXTREME FLUID
Next Generation Templating
TYPO3 Akademie 2011 - Marit AG
26.02.2011
Patrick Lobacher (GF typovision*)
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011
2. ÜBER PATRICK LOBACHER
• Patrick Lobacher (geb. Schuster) - GF typovision*
• 40 Jahre alt, verheiratet, wohnhaft in München
• Autor von 6 Fachbüchern und 26 Fachartikeln
zum Thema TYPO3 und Webentwicklung
• Certified TYPO3 Integrator seit 2009
• Mitglied in den TYPO3 Core-Teams:
Certification & Documentation
• Mitveranstalter des TYPO3camp München
• Speaker auf nationalen und internationalen Kongressen
• Dozent für führende Schulungsinstitute und die MVHS
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 2
3. ÜBER TYPOVISION*
• Münchner Fullservice-Agentur für digitale Kommunikation
• 8 Mitarbeiter (+ 8 aus festem Freelancer Pool)
• Geschäftsführer: Patrick Lobacher
• Spezialisiert auf TYPO3 seit 8 Jahren (Extbase/Fluid seit 2009)
• Agenturpräsentation unter: www.typovision.de/dieagentur
• Über 120 TYPO3-Projekte jeglicher Größenordnung - für Kunden wie:
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 3
6. FLUID GESCHICHTE
und Philosophie
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 6
7. 01 FLUID GESCHICHTE
• Templating Status Quo Anfang 2009
// Template ermitteln
$this->templateCode = $this->cObj->fileResource($conf['templateFile']);
// Subpart auslesen
$template['total'] =
$this->cObj->getSubpart($this->templateCode,'###TEMPLATE###');
// Marker füllen
$markerArray['###MARKER1###'] = 'content for marker 1';
$markerArray['###MARKER2###'] = 'content for marker 2';
// Marker im Template ersetzen
$content = $this->cObj->substituteMarkerArrayCached($template['total'],
$markerArray);
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 7
8. 01 FLUID GESCHICHTE
• Nachteile der „Marker“-Methode
• Layout und Code wird vermischt
• Designer und Programmierer können nicht unabhängig
voneinander arbeiten
• schlecht erweiterbar (neue Marker)
• (unnötig) komplizierte API-Funktionen
• keine Kontrollstrukturen im Template möglich
• Nur Strings und Arrays -> keine Objekte möglich
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 8
9. 01 FLUID GESCHICHTE
• Ziele von Fluid
• Einfache und elegante Template-Engine
• Unterstützung des Template-Autors
(Autovervollständigung in Eclipse, ...)
• Einfache Erweiterbarkeit
• Intuitive Verwendung
• Verschiedene Ausgabeformate sollen möglich sein
• vollständige Objektorientierung
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 9
10. 01 FLUID GESCHICHTE
• Ziel von Fluid => View Logik im View
Quelle: Rau/Kurfürst - Zukunftssichere Extensions mit Extbase und Fluid
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 10
11. FLUID BASISKONZEPTE
und darüber hinaus
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 11
12. 02 FLUID BASISKONZEPTE
Object ViewHelper
Accessors Arrays
spezielle Tags
im Template,
geben den Inhalt die komplexe ermöglichen die Übergabe
von Variablen aus, Funktionalitäten wie von hierarchischen Werten
die dem View Schleifen, Generierung von an ViewHelper
zur Darstellung Links, Formulare, ...
übergeben wurden bereitstellen
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 12
16. 02 FLUID BASISKONZEPTE
• Es existieren viele ViewHelper von anderen
• format.strftime (Formatiert TS oder Date-Object mit strftime)
• include.css (CSS-Datei als HeaderData)
• include.js ( JavaScript-Datei als HeaderData)
• include.data (HeaderData allgemein)
• fileicon (Zeigt Icon passend zur Dateiendung)
• format.age (Zeigt das Alter in h,min,sec eine DateObjects)
• format.stripTags (strip_tag Funktion von PHP)
• link.telephoneNumber (Telefonlink für Smartphones)
• u.s.w.
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 16
17. 02 FLUID BASISKONZEPTE
• Eigene ViewHelper schreiben
• Namen ausdenken
• Datei: NamenViewHelper.php
• ins Verzeichnis Classes/ViewHelpers/ der Extension
• Klasse:
class Tx_[ExtName]_ViewHelpers_NamenViewHelper
extends
Tx_Fluid_Core_ViewHelper_AbstractViewHelper oder
Tx_Fluid_Core_ViewHelper_TagBasedViewHelper
• Methode: render()
• {namespace foo=Tx_[Extname]_ViewHelpers}
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 17
18. 02 FLUID BASISKONZEPTE
• Arrays als flexible Datenstrukturen
• Arrays werden verwendet, um ViewHelpern eine variable
Anzahl an Argumenten zu übergeben
• <f:link.action controller="Post"
action="show" arguments="{post: currentPost,
blog:blog}">Show current post</f:link.action>
• { key1: 'Hello',
key2: "World",
key3: 20,
key4: blog,
key5: blog.title,
key6: '{firstname} {lastname}'
}
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 18
22. 03 FLUID STANDALONE VIEW
• Fluid Standalone View ermöglicht die Nutzung von Fluid
ohne Extbase
• Einsatz in klassischen Extensions, Emails aus Extbase,
• Heute (TYPO3 >= 4.5 / Extbase/Fluid >= 1.3)
$view = t3lib_div::makeInstance('Tx_Fluid_View_StandaloneView');
$view->setTemplatePathAndFilename($templatePathAndFilename);
$view->setLayoutRootPath($layoutRootPath);
$view->setFormat($format);
$view->assign('key', $data);
$content = $view->render();
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 22
23. 03 FLUID STANDALONE VIEW
Methode Beschreibung
set get Format Format (z.B. html)
Gibt das Request-Objekt
get Request
zurück
set get TemplatePathAndFilename Template-Pfad
set TemplateSource Template-Source
set get LayoutRootPath Layout-Pfad
set get PartialRootPath Partial-Pfad
Prüfung auf valides
hasTemplate
Template
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 23
24. FLUIDTEMPLATE
Fluid Templating für das Seitentemplate
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 24
25. 04 FLUIDTEMPLATE
• Fluid bisher nur in Extensions nutzbar
• Seit TYPO3 4.5 gibt es das cObject FLUIDTEMPLATE
• Damit ist eine Nutzung von Fluid auch im
Seitentemplate via TypoScript möglich
• Basiert technisch auf dem „Fluid Standalone View“
• Klasse:
typo3/sysext/cms/tslib/
class.tslib_content_fluidtemplate.php
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 25
27. 04 FLUIDTEMPLATE
• Zugriff auf alle Seiteneigenschaften:
Sie befinden sich auf der Seite mit der UID {data.uid}
und dem Titel {data.title}
<f:if condition="{data.layout}==1">
<f:then>
Layout-Feld steht auf dem Wert "Layout 1"
</f:then>
<f:else>
Layout-Feld steht NICHT auf dem Wert "Layout 1"
</f:else>
</f:if>
Alle Eigenschaften: <f:debug>{data}</f:debug>
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 27
31. FLUID WIDGETS
Ein ViewHelper im ViewHelper :-)
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 31
32. 06 FLUID WIDGETS
• Einige
Funktionalitäten
sind nur schwer
über ViewHelper
abbildbar
• Dafür wurden
Widgets
eingeführt
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 32
33. 06 FLUID WIDGETS
• Widgets
• werden wie ViewHelper im View eingesetzt
• haben einen eigenen Controller
(und damit eigene Actions)
• und ein eigenes Template
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 33
34. 06 FLUID WIDGETS
• Pager
• Controller holt aus dem Repository x Datensätze und
übergibt nur diese dem View
• View stellt x Datensätze dar
• Im View Action-Links zu den nächsten x Datensätzen
• ...
• => Problem: Für einen „einfachen“ Pager muss die
Extension individuell verändert werden
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 34
35. 06 FLUID WIDGETS
• Lösung: Paginate Widget
• <f:widget.paginate objects="{blogs}" as="paginatedBlogs"
configuration="{itemsPerPage: 3, insertAbove: 1}">
<f:for each="{paginatedBlogs}" as="blog">
{blog.title}
</f:for>
</f:widget.paginate>
• Controller zum Aufbau der Paginierung
(Ändert das Query-Objekt)
• Template zur Darstellung der Paginierung
• => Widgets sind damit unabhängig von der Extension
obwohl Sie eventuell in deren Objekte eingreifen
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 35
36. 06 FLUID WIDGETS
• Eigene Widgets schreiben
• Name ausdenken [Vhname] => <ns:widget.vhname>...
• Folgende Klasse in Classes/Viewhelpers/Widgets/
class Tx_Fluid_ViewHelpers_Widget_[Vhname]ViewHelper extends
Tx_Fluid_Core_Widget_AbstractWidgetViewHelper { }
• Methode render() enthält return $this->initiateSubRequest();
• Folgende Klasse in Classes/Viewhelpers/Widgets/Controller/
class Tx_Fluid_ViewHelpers_Widget_Controller_[Vhname]Controller
extends Tx_Fluid_Core_Widget_AbstractWidgetController { }
• Widget-Controller verhält sich wie richtiger Controller (initializeAction,
indexAction, ...)
• Template in Resources/Private/Templates/ViewHelpers/Widget/[Vhname]
• Navigation über interne Widget-Links <f:widget.link action=“index“>
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 36
38. 07 FLUID BEISPIELE
• Daten für den
Menülayer werden
gruppiert
dargestellt (nach
der Art wie
„Feldebene“)
• Dafür verwendet:
groupedFor
ViewHelper
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 38
39. 07 FLUID BEISPIELE
• Rahmen und
Drehung des oberen
Bildes per cObject
Viewhelper
• Mail-Template per
Fluid Standalone
View
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 39
40. 07 FLUID BEISPIELE
• Model: Order
• Eigenschaft:
„contact“ ist
Mapping auf
tt_address
• property=
“contact.phone“
• Dropdowns für
Geburtstag aus
ViewHelper
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 40
41. 07 FLUID BEISPIELE
• Anzeige der POIs
über einen
eigenen
GoogleMaps
ViewHelper
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 41
42. QUELLEN
Fluid bis zum Abwinken
(c) 2011 - typovision* | Extreme Fluid - T3AK11 | Patrick Lobacher | www.typovision.de | 26.02.2011 42