Typo3 Extensions mit IRRE

Aus Wikizone
Wechseln zu: Navigation, Suche


Übersicht[Bearbeiten]

  1. Im Kickstarter zusätzliche Felder in den Kindtabellen anlegen (parenttable, parentid -> Typ Passthrough)
  2. Im Kickstarter zusätzliches Feld in Elterntabelle anlegen (z.B. children -> Typ z.B. Integer)
  3. Backendkonfiguration für die Elterntabelle im TCA (tca.php) anpassen.

Erläuterung:

  • Kindtabellen (n-Tabelle) benötigen die Felder parenttable und parentid. In diesen wird auf die Elterntabelle und die uid des Elterndatensatzes verwiesen(weak entity - der Kind Datensatz weiß wohin er gehört).
  • Elterntabellen enthalten ein Feld das aussagt wieviel Kinder zum Element gehören (siehe Beispiel) Dieses Feld kann im EM als Integer angelegt werden.
    • Die Felder parenttable und parentid kann man im Extension Manager als Typ PassThrough anlegen, das werden dann tinytext-Felder angelegt, geht aber trotzdem.
  • tca.php anpassen
    • In der tca.php muß man in den Elterntabellen die Definition für die Kindtabelle anpassen (das Integer Feld). Im Detail ist das der Inhalt des array config(...) und muß als Inline Feld umdeklariert werden z.B.:

Elterntabelle im tca.php Vorher (Ausschnitt):

...
			"config" => Array (
				"type"     => "input",
				"size"     => "4",
				"max"      => "4",
				"eval"     => "int",
				"checkbox" => "0",
				"range"    => Array (
					"upper" => "1000",
					"lower" => "10"
				),
				"default" => 0
			)

...

Elterntabelle Nachher (Ausschnitt):

$TCA["tx_irrehotel_hotel"] = Array (
	"ctrl" => $TCA["tx_irrehotel_hotel"]["ctrl"],
	"interface" => Array (
		"showRecordFieldList" => "hidden,title,programs"
	),
	"feInterface" => $TCA["tx_irrehotel_hotel"]["feInterface"],
	"columns" => Array (
                [...],
		"programs" => Array (		
			"exclude" => 1,		
			"label" => "LLL:EXT:irre_hotel/locallang_db.xml:tx_irrehotel_hotel.programs",		
			"config" => Array (
				"type" => "inline",
				"foreign_table" => "tx_irrehotel_program",
				"foreign_field" => "parentid",
				"foreign_table_field" => "parenttable",
				"maxitems" => 10,
			)
		),
	),
	"types" => Array (
		"0" => Array("showitem" => "hidden;;1;;1-1-1, title;;;;2-2-2, programs;;;;3-3-3")
	),
	"palettes" => Array (
		"1" => Array("showitem" => "")
	)
);

Kurzanleitung[Bearbeiten]

1:n Verknüpfung mit IRRE[Bearbeiten]

  1. Siehe Schema oben

m:m Verknüpfungen[Bearbeiten]

Siehe Schema

Begriffserklärungen[Bearbeiten]

Datenbankbeziehungen[Bearbeiten]

Normalisierte 1:n Verknüpfung[Bearbeiten]

Bei der 1:n Verknüpfung wird jeder Kinddatensatz mit dem Elterndatensatz verknüpft. Dazu wird in der Kindtabelle die id des Elternelements angegeben. Auf diese Weise können alle Kindelemente eines Elternelements abgefragt werden. Bei IRRE wird zudem im Kindelement die Elterntabelle mit angegeben. Somit weiß das Kindelement, welches seine Elterntabelle und welches sein Elterndatensatz ist. Man spricht hier von einer "weak entity" (schwaches dasein)

m:m Verknüpfungen[Bearbeiten]

In manchen Fällen kann ein Kinddatensatz mit mehreren Elterndatensätzen verknüpft sein (ein Kind hat zwei Eltern). In diesem Fall nutzt man eine Zwischentabelle die alle Verbindungen enthält (Eltern können mehrere Kinder haben, Kinder können mehrere Eltern haben). Man spricht auch von Bidirektionalen Verknüpfungen (die Eltern sehen Ihre Kinder, die Kinder sehen ihre Eltern).

Asymetrische und Symetrische Beziehungen[Bearbeiten]

Man spricht von Asymetrischen Beziehungen wenn 2 unterschiedliche Tabellen verknüpft sind. Z.B. könnte man die Tabelle "Organisationen" mit der Tabelle "Mitarbeiter" Verknüpfen.

Eine Symetrische Verbindung liegt dann vor, wenn ein Datensatz mit einem anderen Datensatz der selben Tabelle verknüpft ist. So könnte in einer Tabelle "Menschen" Das Kindelement "Benjamin" mit dem Elternelement "Bernhard" verknüpft sein, der wiederum Kindelement des Elterndatensatzen "Britta" ist. Alle Elemente sind vom gleichen Typ, haben aber unterschiedliche Beziehungen zueinander.