[TYPO3-english] Extbase: Multi-language problem

Felix Heller felix.heller at aimcom.de
Mon Aug 1 10:06:17 CEST 2011


Hello,


I'm having some trouble with a multi-language extension which uses Extbase  
and Fluid. The problem is that it doesn't show entries in other languages  
than the default one (sys_language_uid = 0).

In the ext_tables.php, I've configured some tables like this one:

	$TCA['tx_example_domain_model_example'] = array(
		'ctrl' => array(
			// ...
			'languageField' => 'sys_language_uid',
			// ...
		)
	);

By activating the sqlDebug option in localconf.php, I was able to find a  
possible source for this problem. It is the SQL statement in the function  
addSysLanguageStatement($tableName, array &$sql) in  
typo3/sysext/extbase/Persistence/Storage/Typo3DbBackend.php:

	protected function addSysLanguageStatement($tableName, array &$sql) {
		if (is_array($GLOBALS['TCA'][$tableName]['ctrl'])) {
			if(isset($GLOBALS['TCA'][$tableName]['ctrl']['languageField']) &&  
$GLOBALS['TCA'][$tableName]['ctrl']['languageField'] !== NULL) {
				$sql['additionalWhereClause'][] = $tableName . '.' .  
$GLOBALS['TCA'][$tableName]['ctrl']['languageField'] . ' IN (0,-1)';
			}
		}
	}

I think that this cannot work for entries in other languages than the  
default one because those entries have a sys_language_uid that is not 0 or  
-1. I solved this problem by modifying this row to:

	$sql['additionalWhereClause'][] = $tableName . '.' .  
$GLOBALS['TCA'][$tableName]['ctrl']['languageField'] . ' IN ('.  
$GLOBALS['TSFE']->sys_language_uid .',-1)';

I have to implement this workaround for every new TYPO3 version which is  
quite nasty... I wonder if I've just misconfigured my extension somehow or  
if this is a problem with extbase. It would be nice if somebody could help  
me with issue.


Greetings
Felix Heller
_____________________

TYPO3-Agentur München
TYPO3 agency Munich
http://www.aimcom.de


More information about the TYPO3-english mailing list