Anzeige
Anzeige
Software & Entwicklung

TYPO3 4.1 Feature „Inline Relational Record Editing“ kurz vorgestellt: Einfach irre!

Ab Version 4.1 besitzt TYPO3 mit „Inline Relational Record Editing“, kurz IRRE, erstmals ein Feature, um komplexe Datenstrukturen mit wiederkehrenden Unterelementen in einer Eingabemaske im TYPO3-Backend bearbeiten zu können. Neue Datensätze werden mithilfe von AJAX dynamisch integriert. Die persistente Datenspeicherung erfolgt dabei vorzugsweise per normalisiertem Datenmodell.

4 Min.
Artikel merken
Anzeige
Anzeige

Bei einem Reiseportal sollen Hotels und deren Leistungen im Internet dargestellt werden und vom Kunden direkt gebucht werden können. Ein Hotel bietet beispielsweise diverse Erholungs- oder Wellness-Programme an, die wiederum einer unterschiedlichen Preisstruktur unterliegen, je nachdem, ob man zur Haupt- oder Nebensaison buchen möchte.

Anzeige
Anzeige

Dieses Szenario soll unser Einstieg in die Welt relationaler Daten sein. Die Objekte „Hotel“, „Programm“ und „Preis“ sind jeweils direkt voneinander abhängig: Ein Programm ist einem Hotel fest zugeordnet und könnte ohne dieses Elternobjekt nicht existieren (Komposition).

Irre?

Der bisherige Weg, die beschriebene Datenstruktur zu bewältigen – die sich immerhin über drei Ebenen erstreckt – war eher mühselig. So musste etwa das Hotel als Elternobjekt angelegt und auch gleich wieder abgespeichert werden, damit TYPO3 eine UID erzeugt, auf die Programme als Kindobjekte referenzieren können. Über selbst gestrickte Wizards, die diverse Popups öffnen, konnte die gewünschte Struktur zumindest einigermaßen komfortabel realisiert werden.

Anzeige
Anzeige

Die Extension „kb_tca_section“ von Bernhard Kraft und „dynaflex“ von Thomas Hempel brachten schon etwas mehr Komfort – so konnte die Struktur weitgehend in einer Ansicht bearbeitet werden. Für jeden neuen Kinddatensatz oder eine Änderung der Element-Sortierung war jedoch trotzdem das Abspeichern und Neuladen der kompletten Eingabemaske notwendig.

Anzeige
Anzeige

IRRE!

Inline Relational Record Editing (IRRE) setzt bei den vorher genannten Punkten an. Einem neuen, ungespeicherten Elternobjekt können sofort weitere Kindelemente hinzugefügt und bearbeitet werden. Vorhandene Elemente können vom Elternobjekt wieder entfernt oder per Drag & Drop sortiert werden. Die Anzahl der möglichen Hierarchieebenen ist nahezu unbeschränkt. Wenn alle Daten vollständig sind, wird die Datenstruktur per Klick auf Abspeichern in der Datenbank abgelegt. Das Hotel-Beispiel vom Anfang kann so auf einen Streich – vom Hotel, über die Programme, bis zu den Preisen – direkt eingegeben und administriert werden.

Datenspeicherung

IRRE unterstützt verschiedene Arten, um Relationen zwischen Elternobjekten und den zugehörigen Kindobjekten zu speichern. Listen stellen dabei die einfachste Variante dar. Die UIDs der Kindobjekte werden in einem Feld des Elternobjekts gespeichert und sind per Komma getrennt. Die Reihenfolge der einzelnen Werte entspricht der Sortierreihenfolge. Fremdschlüssel ermöglichen normalisierte Datenstrukturen. In der
Tabelle der Kindobjekte wird ein Feld reserviert, das die UID des
Elternobjekts speichert.

Anzeige
Anzeige

Im TYPO3 Content Array (TCA) des Elternelements ist konfiguriert, welches Feld des Kinds dazu herangezogen wird („foreign_field“). Eine weitere Konfigurationsoption erlaubt es, zusätzlich den Tabellennamen des Elternobjekts zu hinterlegen („foreign_table_field“) – man nennt dies auch „weak entity“.

Relationstabellen, bei TYPO3 bereits als MM-Relationen bekannt, erlauben die Verknüpfung von zwei Objekten. Die UID-Werte der beiden zusammengehörigen Datensätze werden hier in einer zusätzlichen Tabelle abgespeichert, der Relationstabelle. Inline Relational Record Editing verwendet allerdings nicht die herkömmlichen MM-Tabellen, sondern eine eigene Tabelle, die ebenfalls per TCA definiert werden kann. Daraus resultiert, dass hier nun Attribute für jede Relation hinterlegt werden können.

PHPtca.php
$TCA['tx_irrehotel_hotel'] = Array(
	'ctrl' => ...,
	'interface' => ...,
	'columns' => Array(
		'title' => Array(
			'label' => ...,
			'config' => Array(
				'type' => 'input',
			),
		),
		'programs' => Array(
			'label' => ...,
			'config' => Array(
				'type' => 'inline',
				'foreign_table' => 'tx_irrehotel_program',
				'foreign_field' => 'parentid',
				'foreign_table_field' => 'parenttable',
				'maxitems' => 10,
			),
		), 
	),
	'types' => ...,
	'palettes' => ...,
);
$TCA['tx_irrehotel_program'] = Array(
	'ctrl' => ...,
	'interface' => ...,
	'columns' => Array(
		'title' => Array(
			'label' => ...,
			'config' => Array(
				'type' => 'input',
			),
		),
		'parentid' => Array(
			'config' => Array(
				'type' => 'passthrough',
			),
		),
		'parenttable' => Array(
			'config' => Array(
				'type' => 'passthrough',
			),
		),
	),
	'types' => ...,
	'palettes' => ...,
);

Listing 1

Ab TYPO3 4.1 lässt sich die Funktionalität von IRRE über den TCA-Typ „inline“ nutzen. Das angeführte Beispiel soll eine Relation zwischen einem Hotel als Elternelement und mehreren Programmen als Kindelemente zeigen. Das komplette Beispiel ist im TYPO3 Extension Repository (TER) unter dem Namen „irre_hotel“ hinterlegt [1].

Anzeige
Anzeige

In der Tabelle des Elternobjekts (tx_irrehotel_hotel) wird dem Feld „programs“ der Typ „inline“ zugewiesen, um IRRE hierfür verwenden zu können. Außerdem wird per „foreign_table“ die Tabelle des Kindobjekts (tx_irrehotel_program) definiert. Mit „foreign_field“ und „foreign_table_field“ sind die Felder der Kind-Tabelle benannt, in denen später die UID des Elternobjekts sowie dessen Tabellenname hinterlegt werden.

Auszug aus der MySQL-Tabelle „tx_irrehotel_hotel“:

uid pid title programs
13 2 Wohlfühlhotel am Rosengarten, Bad Steben 3

Auszug aus der MySQL-Tabelle „tx_irrehotel_program“:

uid pid title parentid parenttable
55 2 Kennenlern-Angebot 13 tx_irrehotel_hotel
56 2 Verwöhn-Tage 13 tx_irrehotel_hotel
57 2 Gesundheits-Kur 13 tx_irrehotel_hotel

Fazit

Das Diplomarbeitsthema des Autors beschreibt das Thema dieses Artikels noch detaillierter und steht in englischer Sprache kostenfrei zur Verfügung [2]. Einen oberflächlicheren und schnelleren Überblick kann man sich per TYPO3-Wiki [3] verschaffen.

Anzeige
Anzeige

Die Einsatzbereiche von Inline Relational Record Editing sind vielfältig. So könnten beispielsweise Bilder der Standardinhaltselemente (tt_content) in einer eigenen Tabelle gehalten und mit Untertitel, Links und weiteren Eigenschaften versehen werden. Jedes Bildobjekt könnte dann individuell ohne Abspeichern und Neuladen der Backend-Ansicht bearbeitet werden. Die genauen TCA-Konfigurationsmöglichkeiten sind in der Dokumentation der TYPO3 Core APIs zu finden [4].

Zukunftsmusik

Das Projekt IRRE wurde auch mit Blick auf David Brühlmeiers „Party Information Framework“ (vormals Partner Framework) [5] entwickelt. Dort wird es bei der Handhabung von Personen beziehungsweise Organisationen und deren Verbindungen untereinander zum Einsatz kommen. IRRE wird weiterentwickelt und soll auch in Zukunft schrittweise neue Features erhalten. Interessierte können Erweiterungswünsche entweder über den Bug-Tracker [6] oder über die News-Liste [7] einreichen und diskutieren.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Kommentare

Community-Richtlinien

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Kommentar abgeben

Melde dich an, um Kommentare schreiben und mit anderen Leser:innen und unseren Autor:innen diskutieren zu können.

Anmelden und kommentieren

Du hast noch keinen t3n-Account? Hier registrieren

Anzeige
Anzeige