Zum Inhalt springen

TCA displayCondition - Verknüpfung über zwei Tabellen

Erstellt am 1. Juni 2013 · 3 Antworten · letzte Antwort am 5. Juni 2013

Tags: Extbase, TCA, Frage

Unbekannter Benutzer ·

Hallo,
ich würde gerne in Abhängigkeit einer Auswahl von einer Select-Box ein anderes Feld ein-/ausblenden (in einem Backend-Modul).
Das Problem ist, es sind zwei Tabellen.

Sprich zb. tx_client_domain_model_client hat das Feld template. Wenn dieses Feld geändert wird soll aus der Tabelle tx_client_domain_model_image das Feld image ausgeblendet werden.

Die beiden Tabellen stehen in einer 1:n Relation (tx_client_domain_model_client -> tx_client_domain_model_image)

Ich habe folgendes versucht:

ext_tables.php

$TCA['tx_client_domain_model_client'] = array(
	'ctrl' => array(),
        'requestUpdate' => 'template',

Und im TCA für das Image:

Image.php

$TCA['tx_client_domain_model_image'] = array(
...
 'columns' => array(
    'image' => array(
	'exclude' => 0,
	'label' => 'LLL:EXT:client/Resources/Private/Language/locallang_db.xlf:tx_client_domain_model_image.image',
        'displayCond' => 'FIELD:template:=:1',
        'config' => array(
		'type' => 'group',
		'internal_type' => 'file',
		'uploadfolder' => 'uploads/tx_client',
		'show_thumbs' => 1,
		'size' => 1,
                'minitems' => 0,
                'maxitems' => 1,
		'allowed' => $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'],
		'disallowed' => '',
	),
    ),
  ),
...
);

TCA Client.php (Ausschnitt für das template-Feld)

	'template' => array(
		'exclude' => 0,
		'label' => 'LLL:EXT:client/Resources/Private/Language/locallang_db.xlf:tx_client_domain_model_client.template',
		'config' => array(
			'type' => 'select',
			'items' => array(
				array('default', 0),
                                array('actor', 1),
			),
			'size' => 1,
			'maxitems' => 1,
			'eval' => ''
		),

Leider bekomme ich es nicht hin. Kann mir hier jemand helfen?

Hatte gedacht ich könnte über

'displayCond' => 'FIELD:tx_client_domain_model_client.template:=:1',

darauf zugreifen. Hat aber leider nicht geklappt.
Geht das überhaupt?

karlchen · · Beste Antwort

Hi,

statt die displayCond könntest du auch die "types" Funktion im TCA nutzen. Das ist das Dingen wenn du z.B. Ein Inhaltselment anlegst und dann von "Text" auf "Text mit Bild" änderst.
Bei diesen Änderungen werden immer neue Feld Konfigurationen geladen, somit könntest du dein Image Feld ausblenden, bzw weglassen.

Schau dir vielleicht "news" als Beispiel an:
in der ext_tables.php wird das Feld definiert welches das neuladen erzwingen soll, in diesem Fall heißt das Feld schon 'type'

$TCA['tx_news_domain_model_news'] = array(
	'ctrl' => array(
                  ...
		'type' => 'type',
                ....

in der Tca/news.php wird das Feld als select definiert

    'type' => array(
...
			'config' => array(
				'type' => 'select',
				'items' => array(
					array($ll . 'tx_news_domain_model_news.type.I.0', 0),
					array($ll . 'tx_news_domain_model_news.type.I.1', 1),
					array($ll . 'tx_news_domain_model_news.type.I.2', 2),
				),
				'size' => 1,
				'maxitems' => 1,
			)
		),

ganz unten in der selben Datei gibt es ein weiteres array was 'types' heißt, dort werden dann die Felder notiert die angezeigt werden sollen, für den jeweiligen Wert aus dem Feld 'type' (hier 0,1 und 2)

'types' => array(
		// default news
		'0' => array(
			'showitem' => 'l10n_parent, l10n_diffsource,
				...
		),
		// internal url
		'1' => array(
			'showitem' => 'l10n_parent, l10n_diffsource,
					title;;paletteCore,;;;;2-2-2, teaser;; ...
				...
		),
		// external url
		'2' => array(
			'showitem' => 'l10n_parent, l10n_diffsource,
					title;;paletteCore,;;;;2-2-2, teaser;; ...
		),
	),
Unbekannter Benutzer ·

Ich hab mir das jetzt mal angeschaut.

So wie ich das verstehe, kann ich darüber aber auch nicht ein Feld einer anderen Tabelle ausblenden.
Zumindest in der news-Extension werden auch "nur" Felder aktiviert und deaktiviert die Teil der Tabelle tx_news_domain_model sind. Sprich ich könnte sagen, das je nach Auswahl, Bilder angezeigt werden oder eben nicht. Ich könnte aber nicht sagen, dass die Caption für die Bilder - abhängig vom gewählten news-type - angezeigt werden oder eben nicht.

Das Feld welches ich ausblenden möchte ist im TCA für Bilder, der Selector der das Steuert (template) ist aber im TCA für den Clienten.
Daher geht das nicht oder habe ich gerade einen Gedankenfehler?