Typo3 extbase: Unterschied zwischen den Versionen

Aus Vosp.info
Wechseln zu:Navigation, Suche
(Controller)
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
  • 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

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] =>