Typo3 Extensions mit IRRE
Aus Wikizone
Version vom 8. August 2007, 10:48 Uhr von 193.196.133.66 (Diskussion)
Übersicht
- Im Kickstarter zusätzliche Felder in den Kindtabellen anlegen (parenttable, parentid -> Typ Passthrough)
- Im Kickstarter zusätzliches Feld in Elterntabelle anlegen (child[name] -> Typ z.B. Integer)
- 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.