Zum Inhalt springen

Sprache als Label für erfassten Datensatz

Erstellt am 26. Mai 2007 · 2 Antworten · letzte Antwort am 11. September 2007

Tags: TCA, Frage

sopinon ·

Hallo zusammen,

Ich habe da ein kleines Problem mit einer Extension welche ich geschrieben habe. Ich habe eine Tabelle mit Titel und einer Sprachauswahl (als normales selector Feld! Keine Lokalisierung).

Ich möchte nun, dass wenn ein Datensatz erstellt wird, dieser bei der Auflistung das Label der zuvor selektierten Sprache erhält. Wenn ich das so mache wie unten bei ext_tables.php wird natürlich nur die sys_language_uid der jeweiligen Sprache ausgegen, ich will da jedoch den Titel der Sprache haben. Wie kann ich das machen. Gibt es da eine Möglichkeit ein subquery einzufügen? "(select title from sys_language where uid = language) as title_lang". Habe versucht diesen Code bei diversen Felder Listen unter zu bringen, und "title_lang" dann als label zu definieren, doch das klappt leider nicht...

Ich gebe zu, es wäre "murx", da subqueries nicht bei allen mysql versionen unterstützt wird. Aber egal... 😉

So sieht ext_tables.php aus:

<?php
if (!defined ('TYPO3_MODE')) 	die ('Access denied.');
$TCA["tx_adiatest_test"] = array (
	"ctrl" => array (
		'title'     => 'LLL:EXT:adia_test/locallang_db.xml:tx_adiatest_test',		
		'label'     => 'language',	
		'tstamp'    => 'tstamp',
		'crdate'    => 'crdate',
		'cruser_id' => 'cruser_id',
		'default_sortby' => "ORDER BY crdate",	
		'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY).'tca.php',
		'iconfile'          => t3lib_extMgm::extRelPath($_EXTKEY).'icon_tx_adiatest_test.gif',
	),
	"feInterface" => array (
		"fe_admin_fieldList" => "language, title",
	)
);
?>

Und so tca.php:

<?php
if (!defined ('TYPO3_MODE')) 	die ('Access denied.');

$TCA["tx_adiatest_test"] = array (
	"ctrl" => $TCA["tx_adiatest_test"]["ctrl"],
	"interface" => array (
		"showRecordFieldList" => "language,title"
	),
	"feInterface" => $TCA["tx_adiatest_test"]["feInterface"],
	"columns" => array (
		"language" => Array (		
			"exclude" => 1,		
			"label" => "LLL:EXT:adia_test/locallang_db.xml:tx_adiatest_test.language",		
			"config" => Array (
				"type" => "select",	
				"items" => Array (
					Array("",0),
				),
				"foreign_table" => "sys_language", 
				"foreign_table_where" => "ORDER BY sys_language.uid",	
				"size" => 1,	
				"minitems" => 0,
				"maxitems" => 1,
			)
		),
		"title" => Array (		
			"exclude" => 1,		
			"label" => "LLL:EXT:adia_test/locallang_db.xml:tx_adiatest_test.title",		
			"config" => Array (
				"type" => "input",	
				"size" => "30",
			)
		),
	),
	"types" => array (
		"0" => array("showitem" => "language;;;;1-1-1, title;;;;2-2-2")
	),
	"palettes" => array (
		"1" => array("showitem" => "")
	)
);
?>
mmecker ·

Wenn ich Dich richtig verstanden habe, ist das, was Du suchst:

"columns" => array (
	'sys_language_uid' => array (		
		'exclude' => 1,
		'label'  => 'LLL:EXT:lang/locallang_general.xml:LGL.language',
		'config' => array (
			'type'                => 'select',
			'foreign_table'       => 'sys_language',
			'foreign_table_where' => 'ORDER BY sys_language.title',
			'items' => array(
				array('LLL:EXT:lang/locallang_general.xml:LGL.allLanguages', -1),
				array('LLL:EXT:lang/locallang_general.xml:LGL.default_value', 0)
			)
		)
	),
...
)

Bei mir jedenfalls hat es mit Typo3 4.1.2 den gewünschten Effekt...
(= eine Auswahlbox mit den Einträgen Alle, Standard, English, ...)

Allerdings wird in die Zieltabelle dann natürlich die sys_language_uid eingetragen, die sich auf den Eintrag in der sys_language-Tabelle bezieht, nicht die Sprache im Klartext - falls das gewünscht gewesen sein sollte. Dazu gehört dann auch der ctrl-Eintrag

'languageField' => 'sys_language_uid',