Zum Inhalt springen

Extension Builder und IRRE

Erstellt am 20. September 2011 · 1 Antwort · letzte Antwort am 21. September 2011

Tags: TCA, Frage

Typo3Cuckoo ·

Hi,

ich versuche, eine Extbase Extension mit IRRE Funktionalität umzusetzen. Dazu hab ich diese Anleitung gefunden:

Tutorial for Inline Relational Record Editing IRRE

Nun möchte ich die Extension mit dem Extension Builder anlegen. Kann ich dort die Konfiguration für IRRE vornehmen oder muss ich alles was IRRE betrifft nachträglich von Hand anpassen?

Hat das schon mal jemand versucht? Gibt es vielleicht eine Anleitung speziell für Extbase + IRRE?

Danke und Gruß.

Typo3Cuckoo ·

Ok, bin schon etwas weiter gekommen! 🙂

Legt man über den Extesion Builder eine Relation zwischen zwei Klassen an, dann wir das Feld im TCA wie folgt definiert:

<?php
'bar' => array(
	'exclude' => 0,
	'label' => 'LLL:EXT:my_extension/Resources/Private/Language/locallang_db.xml:my_extension_domain_model_foo.bar',
	'config' => array(
		'type' => 'select',
		'foreign_table' => 'tx_myextension_domain_model_bar',
		'MM' => 'tx_myextension_foo_bar_mm',
		'size' => 10,
		'autoSizeMax' => 30,
		'maxitems' => 9999,
		'multiple' => 0,
		'wizards' => array(
			'_PADDING' => 1,
			'_VERTICAL' => 1,
			'edit' => array(
				'type' => 'popup',
				'title' => 'Edit',
				'script' => 'wizard_edit.php',
				'icon' => 'edit2.gif',
				'popup_onlyOpenIfSelected' => 1,
				'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
				),
			'add' => Array(
				'type' => 'script',
				'title' => 'Create new',
				'icon' => 'add.gif',
				'params' => array(
					'table' => 'tx_myextension_domain_model_bar',
					'pid' => '###CURRENT_PID###',
					'setValue' => 'prepend'
					),
				'script' => 'wizard_add.php',
			),
		),
	),
),
?>

Um die Relation als IRRE Implementation muss man die obere Definition wie folgt abändern (das Array "appearance" ist optional):

<?php
'bar' => array(
	'exclude' => 0,
	'label' => 'LLL:EXT:my_extension/Resources/Private/Language/locallang_db.xml:tx_myextension_domain_model_foo.bar',
	'config' => array(
		'type' => 'inline',
		'foreign_table' => 'tx_myextension_domain_model_bar',
		'MM' => 'tx_myestension_foo_bar_mm',
		'appearance' => array (
			'collapseAll' => 0,
			'expandSingle' => 0,
			'useSortable' => 1,
			'newRecordLinkPosition' => 'both',
			'newRecordLinkAddTitle' => 0,
		),
	),
),
?>

Meine obige Frage wäre damit beantwortet.

Neue Frage:

Ich muss Daten speichern, welche nur die Relation zweier Models betrifft (Model1 hat eine Relation zu Model2). Die relationsspezifischen Daten müssten also in der MM-Tabelle der Relation zwischen Model1 und Model2 gespeichert werden. Die MM-Tabelle, welche momentan hauptsächlich aus den Feldern uid_local und uid_foreign besteht, müsste also um das Feld relational_data erweitert werden. Für die MM-Tabelle gibt es jedoch keine TCA Definition, das neue Feld wäre Backend also erst mal nicht erreichbar. Ich könnte zwar das TCA um die MM-Tabelle erweitern, dann erscheint aber die MM-Tabelle im Backend als eigener neuer Datensatztyp und nicht als zusätzliches Formularfeld im IRRE-Formular.

In dem Buch Zukunftssichere TYPO3-Extensions mit Extbase & Fluid (1. Auflage 2010) von Jochen Rau und Sebastian Kurfürst wird das Beispiel erwähnt, dass man einzelne Musikstücke auf mehreren CDs hat. Die Track-Nummer eines Musikstücks auf einer CD ist eine Information, welche nur für die Relation zwischen einer bestimmten CD und eines bestimmten Musikstücks wichtig ist, und daher eigentlich in der Zwischentabelle gespeichert werden sollte.

Z.B.: Musikstück 1 hat auf CD 1 die Track-Nummer 1 (ist also das erste Lied auf der CD). auf CD 2 ist das Musikstück 1 auf Position 10 (Track-Nummer = 10).

In dem Buch steht jedoch geschrieben, dass die Speicherung zusätzlicher Domänendaten in einer Zwischentabelle von Extbase nicht unterstützt wird (Seite 140, Kapitel 6). Das ist aber blöd, weil das doch eine relativ wichtige Funktion darstellt. Wie man dieses Beispiel mit Extbase umsetzt wird in dem Buch leider nicht beschrieben 🙁

Wie soll ich solche Informationen denn nun speichern können?

Hat jemand hierz ne Idee?

Vielen Dank schon mal!