Typo3 extbase: Unterschied zwischen den Versionen
F (Diskussion | Beiträge) |
F (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| 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
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] =>