Typo3 extbase: Unterschied zwischen den Versionen
F (Diskussion | Beiträge) (→Controller) |
F (Diskussion | Beiträge) |
||
Zeile 1: | Zeile 1: | ||
+ | |||
+ | = 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 | ||
+ | * '''[https://de.wikipedia.org/wiki/Model_View_Controller MVC]''' | ||
+ | ** Daten'''m'''odell -- Anwenungsschicht; objektorientiert, Klassen werden in DB(Tabellen) abgebildet | ||
+ | ** '''V'''iew | ||
+ | ** '''C'''ontroller | ||
+ | * '''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 | ||
+ | |||
+ | * '''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 = | ||
+ | |||
+ | <source lang="html4strict"> | ||
+ | <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> | ||
+ | </source> | ||
+ | |||
+ | |||
+ | <source lang="php"> | ||
+ | $view->assign('customer', $customer); | ||
+ | </source> | ||
+ | |||
+ | '''interne Übersetzung''' | ||
+ | <source lang="html4strict"><td>{customer.number.vorwahl} / {customer.number.hauptwahl}</td></source> | ||
+ | => | ||
+ | <source lang="html4strict"><td><?=$customer->getNumber()->getVorwahl()?> / <?=$customer->getNumber()->getHauptwahl()?></td></source> | ||
+ | |||
+ | |||
+ | ==Classes/ViewHelpers == | ||
+ | |||
+ | * [http://docs.typo3.org/flow/TYPO3FlowDocumentation/TheDefinitiveGuide/PartV/FluidViewHelperReference.html Viewhelper Referenz Liste] | ||
+ | |||
+ | = 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 = | ||
+ | * [https://de.wikipedia.org/wiki/TYPO3_Flow wp: TYPO3 Flow] | ||
+ | * [http://www.typo3lexikon.de/typo3-tutorials/extensions/fluid.html deutsches Fluid Tutorial] | ||
+ | ** [http://www.typo3lexikon.de/typo3-tutorials/extensions/fluid/parameter-in-kommentaren.html Parameter in Kommentaren] -- ungenau aber trotzdem hilfreich | ||
+ | * [https://www.mittwald.de/fileadmin/downloads/pdf/dokus/Extbase_Fluid_Dokumentation.pdf ausführliche Extbase_Fluid_Dokumentation.pdf von mittwald] | ||
+ | * [http://wiki.typo3.org/Fluid Fluid englisches Fluid Tutorial] | ||
+ | * [http://docs.typo3.org/flow/TYPO3FlowDocumentation/Index.html TYPO3 Flow Documentation] | ||
+ | * [http://t3n.de/magazin/seitentemplates-fluid-226788/ t3n: TYPO3 Templates: Seiten-Layouts mit Fluid umsetzen] | ||
+ | * [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.typo3-nürnberg.de/typo-v5/extbase/backend/modul-im-backend/ kleines modul im backend] | ||
== Klassen == | == Klassen == |
Version vom 22. Mai 2013, 10:43 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
Klassen
Controller
[reflectionService] =>
[cacheService] =>
[view] =>
[viewObjectNamePattern] => Tx_@extension_View_@controller_@action@format
[viewFormatToObjectNameMap] => Array
(
)
[defaultViewObjectName] => Tx_Fluid_View_TemplateView
[actionMethodName] => indexAction
[errorMethodName] => errorAction
[objectManager] =>
[uriBuilder] =>
[extensionName] =>
[settings] => "typoscript settings"
[request] =>
[response] =>
[deprecatedPropertyMapper] =>
[validatorResolver] =>
[arguments] =>
[argumentsMappingResults] =>
[supportedRequestTypes] => Array
(
[0] => Tx_Extbase_MVC_Request
)
[controllerContext] =>
[flashMessages] =>
[flashMessageContainer] =>
[configurationManager] =>