Zum Inhalt springen

TCA N:M Relationen / Abhängigkeiten

Erstellt am 7. November 2013 · 1 Antwort · letzte Antwort am 8. November 2013

Tags: TCA, TYPO3 6.x, Frage

volk0r ·

Hi,

ich arbeite gerade an einer Extension, wo ich mehrere N:M Relationen verarbeiten muss. Das Speichern und Ausgeben ist soweit kein Thema. Meine Frage handelt eher um das Bearbeiten eines Eintrages.

Ein Eintrag meiner Tabelle kann mehreren Kategorien angehören. Diesen Kategorien gehören Unterkategorien an. Der Eintrag in der Tabelle kann aber auch mehreren Unterkategorien angehören, aber nur diesen Unterkategorien, die in den Hauptkategorien enthalten sind.

Wähle ich jetzt eine Hauptkategorie aus, kann ich die abhängigen Subkategorien mit hilfe des TCA ausgeben/manipulieren:

array(
'foreign_table_where' => " AND tx_gdicbpdb_domain_model_subcategories.categories = '###REC_FIELD_categories###'")

das klappt auch wunderbar. Allerdings, wenn der Eintrag jetzt einer 2. Hauptkategorie angehört, werden mir natürlich nur die Unterkategorien vom ersten Eintrag aus meinem Haupt-Kategorien Selectfeld angezeigt und nicht alle, die ich gewählt habe. Und genau hier liegt mein Problem.

Eine where Bedingung im Stile von

array(
'foreign_table_where' => " AND tx_gdicbpdb_domain_model_subcategories.categories IN( ###REC_FIELD_categories###)")

hilft leider nichts, da in dem REC_FIELD_categories nur ein einzelner wert, nämlich der des ersten Eintrages, steht (siehe Anhänge).

Wie kann ich so etwas bewerkstelligen. Ich habe mir bereits die "IRRE" Methode angeschaut, glaube aber, das dies nicht das ist, was ich brauche, da nichts inline bearbeitet werden soll. Es sollen im zweiten Selectfeld lediglich die Einträge angezeigt werden von denen die im Ersten gewählt wurden.

Vielen Dank für Eure Hilfe.

LG, Volker.

Zwischenablagebild-1.jpg
Zwischenablagebild.jpg

volk0r · · Beste Antwort

hi,

für alle, die ein ähnliches problem haben -> ich habe es jetzt folgendermaßen gelöst:

1. das TCA für mein select feld manipuliert und eine itemsProcFunc (also eine "externe" Funktion zur Verarbeitung der Select->Options) eingebunden:

$TCA['tx_gdicbpdb_domain_model_ethdb']['columns']['subcategories']['config'] = array(
	'type' => 'select',
	'foreign_table' => 'tx_gdicbpdb_domain_model_subcategories',
	'MM' => 'tx_gdicbpdb_ethdb_subcategories_mm',
	'size' => 10,
	'autoSizeMax' => 30,
	'maxitems' => 9999,
	'multiple' => 0,
	'itemsProcFunc' => 'SubcategoriesSelect->Items',
);

2. in der ext_tables.php meiner Extension die Klasse für die itemsProcFunc inkludiert:

require_once(t3lib_extMgm::extPath($_EXTKEY).'/Classes/class.SubcategoriesSelect.php');

3. mit der Klasse meine Items manipuliert:

class SubcategoriesSelect {
	public function Items($PA, $fobj) {

		// nach dem gewünschten selectfeld suchen im $PA array und die werte entsprechend für
		// ein sql statement zusammenklöppeln - damit dann die sql abfrage starten
		// und mit dem ergebnis dann die $PA["items"] überschreiben.
	}
}

ich hoffe ich konnte jemand anderem suchenden damit einigermaßen helfen.

lg, volker.