Zum Inhalt springen

Datenbankfelder der eigenen Extension (Mehrsprachigkeit)

Erstellt am 19. Mai 2011 · 2 Antworten · letzte Antwort am 20. Mai 2011

Tags: TCA, Frage

Unbekannter Benutzer ·

Hi,

ich bin dabei mich in extbase und fluid einzuarbeiten aber ich denke meine Frage betrifft generell das Thema "Extension Entwicklung".

Ich habe mir die Extensions "sjr_offers" und "blog_example" als Grundlage/Referenz für meine eigene erste Extension hergenommen.

In der ext_tables.sql meiner Extension steht unter anderem folgendes:

sys_language_uid int(11) DEFAULT '0' NOT NULL,
l18n_parent int(11) DEFAULT '0' NOT NULL,
l18n_diffsource mediumblob NOT NULL,
access_group int(11) DEFAULT '0' NOT NULL,

In der ext_tables.php meiner Extension steht unter anderem das hier:

ctrl' => array (
        'tstamp' => 'tstamp',
	'crdate' => 'crdate',
	'languageField' => 'sys_language_uid',
	'transOrigPointerField' => 'l18n_parent',
  	'transOrigDiffSourceField' => 'l18n_diffsource',
	'delete' => 'deleted',
	'enablecolumns' => array(
		'disabled' => 'hidden'
	),
),
'columns' => array(
	'sys_language_uid' => array(
		'exclude' => '1',
		'label' => 'LLL:EXT:lang/locallang_general.php: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.php:LGL.allLanguages',-1),
				Array('LLL:EXT:lang/locallang_general.php:LGL.default_value',0)
			)
		)
	),
),

Das habe ich eigentlich einfach aus den anderen Extensions kopiert.

In der tca.php der Extension sjr_offers steht das hier:

'columns' => array(
      'sys_language_uid' => array(
      	'exclude' => 1,
      	'label' => 'LLL:EXT:lang/locallang_general.php: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.php:LGL.allLanguages',-1),
      			Array('LLL:EXT:lang/locallang_general.php:LGL.default_value',0)
      		)
      	)
      ),
      'l18n_parent' => array(
      	'displayCond' => 'FIELD:sys_language_uid:>:0',
      	'exclude' => 1,
      	'label' => 'LLL:EXT:lang/locallang_general.php:LGL.l18n_parent',
      	'config' => array(
      		'type' => 'select',
      		'items' => array(
      			Array('', 0),
      		),
      		'foreign_table' => 'tt_news',
      		'foreign_table_where' => 'AND tt_news.uid=###REC_FIELD_l18n_parent### AND tt_news.sys_language_uid IN (-1,0)',
      	)
      ),
      'l18n_diffsource' => Array(
      	'config'=>array(
      		'type'=>'passthrough')
      ),
),

Was ich nicht verstehe sind die zwei Arrays für l18n_parent und l18n_diffsource (deswegen hab ich das nicht in die ext_tables.php meiner Extension nicht übernommen).
Welchen Zweck erfüllen diese zwei Datenbankfelder und brauche ich sie unbedingt in meiner Extension?
Wieso wird bei l18n_parent mit foreign_table => 'tt_news' auf die Tabelle von tt_news zugegriffen? Kann man das einfach weglassen?

Danke schon Mal für hilfreiche Antworten 🙂

aemka ·

Was er da mit tt_news macht, verstehe ich auch nicht. Sieht mir eher wie ein Copy & Paste Fehler aus.

18n_parent gibt bei übersetzten Records die ID des Eltern-Records an, von dem eine Übersetzung angelegt wurde.
l18n_diffsource speichert den Unterschied von Inhalten des Eltern-Records zu den übersetzten INhalte des aktuelllen Records in einer anderen Sprache.

Also beides nur bei Mehrsprachigkeit notwending. BEvor du dich aber mit dem kompletten TCA beschäftigst, auch wenn das sehr löblich ist, ist es wohl einfacher für den Anfang mit dem Kickstarter zu arbeiten. Zumindest wenn der Extbase-Kickstarter derzeit funktioniert. .-)

Unbekannter Benutzer ·

Hi,

ok jetzt verstehe ich das schon um einiges besser, danke! 🙂

Mir war aus der Namensgebung nicht klar, was die Felder für eine Aufgabe haben. Die übersetzte Version eines Datensatzes ist also ein Kind des originalen Datensatzes. Na das muss man erst mal gesagt bekommen hehe 😉

Mit dem Kickstarter hab ich so meine Probleme: fängt schon damit an, dass ich es nicht hinbekomme auf dieses GIT Repository zuzugreifen. Mit Eclipse will das irgendwie nicht funktioneren 🙁 Wie kann ich den Kickstarter denn herunterladen?

Besten dank! 🙂