[TYPO3-dev] EnableField and localisation

Francois Suter fsuter at cobweb.ch
Mon Apr 7 20:52:45 CEST 2008


Hi,

>> But im not able to localize my entry. Is enableFields do this part or do
>> i use a other function for this ? This time all versions of language are
>> displayed in FE.
> 
> you have to select the correct(=actual?) language by yourself:
> just enhance your WHERE-clause with:
> 
> $where_clause .= ' AND sys_language_uid = '
>                .$GLOBALS['TSFE']->sys_language_uid; 

Actually if you use the full possibilities of TYPO3's translation system 
(i.e. your table has all the necessary fields for localisation), it is a 
bit more complicated than that.

The basic idea is that you want to get the records for the default 
language and then overlay the translation on them. If you want to be 
complete, you also need to get the records that are valid for all 
languages (the language field = -1) and the languages is the current 
language (if it's not the default one) that have no original in the 
default language (e.g. your site is in English by default, and a record 
exists only in German).

Furthermore rather than hardcoding the name of the language field in 
your SQL query, you should use the definition from the TCA.

In the end, you should have something like:

// Add selection of language (if activated)
// There are two main cases:
//
//	-	if the overlay mechanism is activated and the reference table has 
translation information,
//		we must get the original elements and the translation will be 
overlaid afterwards
//	-	if not, then we get directly the elements in the right language

if (!empty($GLOBALS['TCA']['your_table_name']['ctrl']['languageField'])) {
	if (isset($GLOBALS['TSFE']->sys_language_contentOL) && 
isset($GLOBALS['TCA']['your_table_name']['ctrl']['transOrigPointerField'])) 
{
		$languageCondition = 
$GLOBALS['TCA']['your_table_name']['ctrl']['languageField'].' IN 
(0,-1)'; // Default language and "all" language

// If current language is not default, select elements that exist only 
for current language
// That means elements that exist for current language but have no 
parent element

		if ($GLOBALS['TSFE']->sys_language_content > 0) {
			$languageCondition .= ' OR 
('.$GLOBALS['TCA']['your_table_name']['ctrl']['languageField']." = 
'".$GLOBALS['TSFE']->sys_language_content."' AND 
".$GLOBALS['TCA']['your_table_name']['ctrl']['transOrigPointerField']." 
= '0')";
		}
	}
	else {
		$languageCondition = 
$GLOBALS['TCA']['your_table_name']['languageField']." = 
'".$GLOBALS['TSFE']->sys_language_content."'";
	}
}

HTH

-- 


Francois Suter
Cobweb Development Sarl - http://www.cobweb.ch




More information about the TYPO3-dev mailing list