Über den Kickstarter können ja MM-Relationen für eine TYPO3 Extension relativ einfach zusammen geklickt werden. Nicht möglich ist jedoch, eine MM-Relation via Kickstarter so zu erzeugen, dass sie von beiden Seiten über das TCA korrekt abgebildet wird und die Eingabemöglichkeiten im Backend zur Verfügung stehen
TYPO3 MM-Relation beidseitig in Extension
Beispiel für beidseitigen MM-Relationen
Es existieren die Datensätze "Firma" und "Betreuer". Ein Betreuer kann beliebigen Firmen zugeordnet sein. Wird der Datensatz "Firma" editiert, sieht man die dieser Firma zugeordneten "Betreuer". Das lässt sich durch den Kickstarter "zusammen klicken". Ebenso möchte man aber, wenn man den Datensatz "Betreuer" editiert, dass man alle Firmen sieht, denen dieser Betreuer zugeordnet ist. Das kann der Kickstarter nicht automatisch konfigurieren, es ist aber dennoch möglich, derartiges in TYPO3 abzubilden.
So funktionieren beidseitige MM-Relationen in TYPO3
Die Tabellen "Firma" und "Betreuer" werden ganz normal über den Kickstarter erzeugt. In beiden Tabellen wird jeweils ein Feld für die entgegengesetzte Tabelle als Datenbank-Relation erzeugt (MM-Relation). Daraufhin erzeugt der Kickstarter für beide Tabellen eine mm-Tabelle. Die mm-Tabelle für die zweite Tabelle ("Betreuer") kann gelöscht werden, da beider Tabellen die gleich mm-Tabelle benutzen müssen.
Im TCA der zweiten Tabelle ("Betreuer") wird nun im "config"-Abschnitt des Feldes mit der Relation der "MM"-Part ersetzt, dass er auf die gleiche Tabelle wie im entsprechenden Abschnitt des Feldes mit der Relation in der "Firma" Tabelle zeigt. Zusätzlich wird die Zeile "MM_opposite_field" => "firma" eingetragen, damit die Felder "uid_local" und "uid_foreign" in diesem Falle vertauscht werden. Achtung: dieser Eintrag darf nur bei der zweiten Tabelle hinzugefügt werden!
Nun muss noch noch die "ext_tables.sql" editiert werden und hier für die mm-Tabelle die Spalte "sorting_foreign int(11) NOT NULL DEFAULT '0'" hinzugefügt werden.
Voila, Cache leeren und das war's: Jetzt sollten in den Datensätzen beider Tabellen jeweils die zugeordneten Datensätze der entgegengesetzten Tabelle sichtbar sein.