Typo3 Flow: Unterschied zwischen den Versionen
F (Diskussion | Beiträge) (→Quellen) |
F (Diskussion | Beiträge) (→Quellen) |
||
Zeile 154: | Zeile 154: | ||
* [http://de.slideshare.net/oliverklee/objektorientierte-programmierung-mit-extbase-und-fluid Objektorientierte Programmierung mit extbase und fluid] | * [http://de.slideshare.net/oliverklee/objektorientierte-programmierung-mit-extbase-und-fluid Objektorientierte Programmierung mit extbase und fluid] | ||
* [http://www.extbasefluid.com/ extbasefluid.com] | * [http://www.extbasefluid.com/ extbasefluid.com] | ||
+ | * [http://www.typo3-nürnberg.de/typo-v5/extbase/backend/modul-im-backend/ kleines modul im backend] |
Version vom 12. März 2013, 15:12 Uhr
Inhaltsverzeichnis
Extension allgemein
- eine Extension kann mehrere Plugins haben die als Inhaltselemente auf eine Typo3 Seite hinzugefügt werden können
Typo3 V4.3 < * < V5
durch die Extensions extbase und fluid läßt sich schon ab typo3 V4.3 zukunftsicher für typo3 V5 entwickeln!
Aktivierung der schon vorhandenen Extensions im Erweiterungsmanager
- extbase - löst pi_base Klasse ab
- MVC Framework (von flow3) für domainorientierte Erweiterungen
- fluid
- template engine
- extension_builder
- der neue kickstarter für extbase/fluid ...
FLOW3 und Extbase
Charakteristia
- FLOW3 hingegen verwendet einen 128-Bit-Hexadezimalzahl als Kennzeichner. Tatsächlich ist die Implementierung eines solchen Identifikators dem Entwickler überlassen, solange die Eindeutigkeit gewährleistet ist.
- Convention over Configuration - Konvention steht über Konfiguration
- vieles ergibt sich aus der gleichen Namensbildung z.B. Klassennamen ähnlich wenn nicht gleich Tabellennamen
- die Verzeichnisstruktur einer Erweiterung muss die Namensräume der Klassen widerspiegeln und umgekehrt.
- ZB aus der Klassenbezeichnung ergibt sich die Ordnerstruktur Tx_extensionname_Controller_MyProjektController => ext/extensionname/Controller/MyProjektController.php
- MVC
- Datenmodell -- Anwenungsschicht; objektorientiert, Klassen werden in DB(Tabellen) abgebildet
- View
- Controller
- Reflection API
- Herrausfinden eines Datentyps, Parametertyp anhand der Kommentare: also WICHTIG: Typen angeben in Form von @param int $var ansonsten im Zweifel Fehler!!!
Verzeichnisstruktur
klare Verzeichnisstruktur ergibt Klassennamenstruktur, etc
- Classes
- Controller -- hier muss mindestens ein Controller sein
- Domain
- Model -- Klassen bilden das Datenmodel des MVC-Models
- Repository
- Validator
- Views -- Objekte bilden die Präsentationsschicht des MVC-Models
- ViewHelpers -- optional ... hier können eigen implementierte Verhaltensstrukturen für die Views abgelegt werden. schon vorhandene sind zB for, if, translate ...
- Configuration -- Konfigurationsdateien die noch nötig sind
- FlexForms
- TCA -- Table Configuration Array beschreibt das Verhalten der Datenbanktabellen
- z.B die Datentypen inklusive Relationen zwischen Tabellen bzw Objekten
- TypoScript
- Resources
- Private -- die der Besucher nicht direkt lesen darf, evt. mit .htaccess zu schützen
- Templates
- Language
- Layout
- Partial
- Public -- CSS, Images die Besucher direkt lesen dürfen
- Private -- die der Besucher nicht direkt lesen darf, evt. mit .htaccess zu schützen
- ext_emconf.php
- wird vom Extensionmanager gelesen
- Informationen über Erweiterung, Versionsnummer, Autor, Einstellungen/Konflikte über Abhängigkeiten zu anderen Erweiterungen.
- ext_localconf.php
- wird bei jedem Frontend-, Backendseitenaufruf gelesen
- Konfiguration
- ext_tables.php
- Erweiterung der ext_loclconf.php zB. Datenbanktabelleninformation
- ext_tables.sql
- Struktur der DB Tabellen
fluid
<h2>{f:translate( key : 'customers' )}</h2>
<table>
<tr>
<th>{f:translate( key: 'customer.number' )}</th>
<th>{f:translate( key: 'customer.name' )}</th>
</tr>
<f:for each="{customers}" as="customer">
<tr>
<td>{customer.number.vorwahl} / {customer.number.hauptwahl}</td>
<td>{customer.name}</td>
</tr>
</f:for>
</table>
$view->assign('customer', $customer);
interne Übersetzung
<td>{customer.number.vorwahl} / {customer.number.hauptwahl}</td>
=>
<td><?=$customer->getNumber()->getVorwahl()?> / <?=$customer->getNumber()->getHauptwahl()?></td>
Classes/ViewHelpers
Persistenzschicht (persistence layer) von Extbase (Datenbankanbindung)
data mapping
Tabellen Spalten Typen:
- DateTime:
- config.eval=date
- config.eval=datetime
- Checkbox
- Ganzzahl (long)
- config.eval=int
- Fließkommazahl:
- config.eval=double2
- Fremdtabelle 1:1
- config.foreign_table=
- Spaltenwert = Fremdtabelle.uid
- Fremdtabelle 1:m
- config.foreign_table=
- config.foreign_field=
Ladeverfahren bei assoziierten Unterobjekten
- Eager Loading (dt. in etwa eifriges Laden) --- alles wird immer geladen
- Lazy Loading (dt. in etwa faules Laden)
Arbeitsschritte zum Anlegen einer Extension
ext_tables.sql
"Die Struktur der Datenbank wird als SQL-Dump in der Datei ext_tables.sql gespeichert."
ext_tables.php
"In der Datei ext_tables.php werden die einzelnen Tabellen konfiguriert. Dies ist notwendig, damit wir die Objekte über das TYPO3-Backend bearbeiten können und Extbase die Datenbanktabellen auf Klassen abbilden kann."
tca.php
"Schließlich werden in der Datei Configuration/TCA/tca.php die Spalten der einzelnen Tabellen konfiguriert. Diese Konfiguration ermöglicht Extbase das Abbilden der Datenbankspalten auf einzelne Klassenattribute. Der Name dieser Konfigurationsdatei ist frei wählbar; er muss lediglich in der ext_tables.php korrekt angegeben werden.
locallang_db.xml
Die sprachabhängigen Bezeichnungen für die Datenbanktabellen werden in der Datei Resources/Private/Language/locallang_db.xml gespeichert. Dieser Dateiname ist frei wählbar und kann in der ext_tables.php und tca.php angegeben werden.
Icons
Icons für die Tabellen können im Verzeichnis Resources/Public/Icons gespeichert werden.
Quellen
- wp: TYPO3 Flow
- deutsches Fluid Tutorial
- Parameter in Kommentaren -- ungenau aber trotzdem hilfreich
- ausführliche Extbase_Fluid_Dokumentation.pdf von mittwald
- Fluid englisches Fluid Tutorial
- TYPO3 Flow Documentation
- t3n: TYPO3 Templates: Seiten-Layouts mit Fluid umsetzen
- Objektorientierte Programmierung mit extbase und fluid
- extbasefluid.com
- kleines modul im backend