Tech 25. Oct. 2012

TYPO3 - Language Overlay auf Feld-Ebene

Wer hätte gedacht, wie lange man da rum probieren kann. Also: Es gibt eine Seite mit einigen individuellen Feldern in den Seiteneigenschaften. Diese sollten in Teasern und auf der Detailseite automatisch per TypoScript ausgegeben werden. Soweit so gut.

Einige der Felder enthalten Namen, welche i.d.R. in mehreren oder sogar allen Sprachen gleich geschrieben werden (bei nicht-lateinischen Schriften gibt es ggf. andere Schreibweisen). Aber da sie häufig identisch sind, sollen die Redakteure nicht für jede Übersetzung der Seite wieder die Namen eingeben müssen. D.h. wenn ein Feld in einer Übersetzung leer ist, soll der Feldinhalt der Originalsprache verwendet werden.

Die language_overlay Mechanismen von TYPO3 lassen das im Standard offensichtlich nicht zu. Man kann zwar ein Overlay erzwingen, aber nie differenziert nach einzelnen Feldern.

Die Lösung sieht dann so aus:

22 = TEXT
22 {
	data = page : tx_myext_fieldname
	stdWrap {
		required = 1
		wrap = 
{LLL:EXT:myext/static/template/locallang.xml:pages.field.tx_myext_fieldname} |
		stripHtml = 1
		htmlSpecialChars.preserveEntities = 1
	}
	override = TEXT
	override {
		data = page : uid
		wrap = {DB:pages:|:tx_myext_fieldname}
		if.isFalse.field = tx_myext_fieldname
		insertData = 1
	}
	insertData = 1
}

Wer hätte gedacht, wie lange man da rum probieren kann. Also: Es gibt eine Seite mit einigen individuellen Feldern in den Seiteneigenschaften. Diese sollten in Teasern und auf der Detailseite automatisch per TypoScript ausgegeben werden. Soweit so gut.

Einige der Felder enthalten Namen, welche i.d.R. in mehreren oder sogar allen Sprachen gleich geschrieben werden (bei nicht-lateinischen Schriften gibt es ggf. andere Schreibweisen). Aber da sie häufig identisch sind, sollen die Redakteure nicht für jede Übersetzung der Seite wieder die Namen eingeben müssen. D.h. wenn ein Feld in einer Übersetzung leer ist, soll der Feldinhalt der Originalsprache verwendet werden.

Die language_overlay Mechanismen von TYPO3 lassen das im Standard offensichtlich nicht zu. Man kann zwar ein Overlay erzwingen, aber nie differenziert nach einzelnen Feldern.

Die Lösung sieht dann so aus:

22 = TEXT
22 {
	data = page : tx_myext_fieldname
	stdWrap {
		required = 1
		wrap = 
{LLL:EXT:myext/static/template/locallang.xml:pages.field.tx_myext_fieldname} |
		stripHtml = 1
		htmlSpecialChars.preserveEntities = 1
	}
	override = TEXT
	override {
		data = page : uid
		wrap = {DB:pages:|:tx_myext_fieldname}
		if.isFalse.field = tx_myext_fieldname
		insertData = 1
	}
	insertData = 1
}