Einfach irre!

TYPO3 4.1 Feature ?Inline Relational Record Editing? kurz vorgestellt

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.

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.

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.

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.

Inline Relational Record Editing in Aktion: Vom Hotel, über die Programme bis zu den zugehörigen Preisen kann alles in einer Ansicht bearbeitet werden.

Inline Relational Record Editing in Aktion: Vom Hotel, über die Programme bis zu den zugehörigen Preisen kann alles in einer Ansicht bearbeitet werden.

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].

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.

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.

- Anzeige-

Dieser Artikel stammt aus:

 

Weitere Artikel dieser Ausgabe

TYPO3 plus Flash ? Zwei Beispiele aus der Praxis

Die Website als Markenerlebnis inszenieren

Grundsätzlich ist Flash für Webentwickler gleichzeitig Segen und Fluch: Weil gute Flash-Programmierer... »

AJAX Framework ? barrierearm

Umfangreiche AJAX-Webseiten schnell entwickeln mit TYPO3

AJAX – die Kerntechnologie im vielgepriesenen Web 2.0 – ist in aller Munde. Viele... »

Ajax-Community

Seit Ende 2005 gibt es die Ajax-Community, die sich voll und ganz dem Web-2.0-Trendthema Ajax... »

Börsengang 2.0

Venture Capital bringt Open Source an den Aktienmarkt

Ein Ereignis wirft seine Schatten voraus: die Ankündigung von MySQL, an die Börse gehen... »

CakePHP

Rapid Prototyping Framework

Eine verlässliche und flexible Architektur ist für den Bau einer Webapplikation unerlässlich.... »

CeBIT Open-Source-Planer

Ein Überblick über Open Source und Linux bei der CeBIT 2007

Im vergangen Jahr berichtete das T3N Magazin erstmals zum Thema Open Source im Rahmen der CeBIT.... »

Collax Business Server

Linux für den Mittelstand

Geboren im Jahr 1991, entwickelte sich das Open-Source-Betriebssystem Linux Schritt für... »

Das Dojo-Toolkit

...der sanfte Ajax-Einstieg

Das Dojo-Toolkit ist ein modular aufgebautes JavaScript-Toolkit für die Erstellung von Ajax-Anwendungen.... »

Datenjonglage mit TYPO3

Keine Angst vor der Portierung großer Websites nach TYPO3

Die Portierung des Online-Informationssystems EUFIS»

Shop  |  T3N Ausgaben  |  Open Source & TYPO3 Marktplatz
Übersicht  |  News  |  hype! Open Source & Web 2.0  |  RSS Feeds