Typo3 Extensions mit IRRE

Aus Wikizone
Wechseln zu: Navigation, Suche


Übersicht

  1. Im Kickstarter zusätzliche Felder in den Kindtabellen anlegen (parenttable, parentid -> Typ Passthrough)
  2. Im Kickstarter zusätzliches Feld in Elterntabelle anlegen (child[name] -> 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 welche Kindtabelle dazugehört (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" => "")
	)
);

m:m Verknüpfungen

m:m Verknüpfungen sind notewendig wenn

Begriffserklärungen

Datenbankbeziehungen

Normalisierte 1:n Verknüpfung

In der Kindtabelle wird 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 weis das Kindelement welches seine Elterntabelle und welches sein Elterndatensatz ist. Man spricht hier von einer "weak entity"

Asymetrische Beziehungen

Hierbei sind 2 Tabellen betroffen.