Index: Z:/svnworkspace/TYPO3_4-1/typo3/sysext/cms/tslib/class.tslib_fe.php =================================================================== --- Z:/svnworkspace/TYPO3_4-1/typo3/sysext/cms/tslib/class.tslib_fe.php (revision 2438) +++ Z:/svnworkspace/TYPO3_4-1/typo3/sysext/cms/tslib/class.tslib_fe.php (working copy) @@ -2031,11 +2031,16 @@ // Get values from TypoScript: $this->sys_language_uid = $this->sys_language_content = intval($this->config['config']['sys_language_uid']); list($this->sys_language_mode,$sys_language_content) = t3lib_div::trimExplode(';', $this->config['config']['sys_language_mode']); - $this->sys_language_contentOL = $this->config['config']['sys_language_overlay']; - + $this->sys_language_contentOL = $this->config['config']['sys_language_overlay']; // If sys_language_uid is set to another language than default: if ($this->sys_language_uid>0) { - // Request the overlay record for the sys_language_uid: + //if other language requested we need to check to set $this->sys_language_overlayCheckOrder (used for menu generation...) + if ($this->config['config']['sys_language_fallBackOrder']) { + if ($this->config['config']['sys_language_fallBackOrder']) { + $this->sys_language_overlayCheckOrder=$this->sys_language_uid.','.$this->config['config']['sys_language_fallBackOrder']; //used for detecting overlays for page records (e.g. menu ...) + } + } + // Request the overlay record for the sys_language_uid: $olRec = $this->sys_page->getPageOverlay($this->id, $this->sys_language_uid); if (!count($olRec)) { @@ -2050,14 +2055,20 @@ case 'strict': $this->pageNotFoundAndExit('Page is not available in the requested language (strict).'); break; - case 'content_fallback': - $fallBackOrder = t3lib_div::intExplode(',', $sys_language_content); - foreach($fallBackOrder as $orderValue) { - if (!strcmp($orderValue,'0') || count($this->sys_page->getPageOverlay($this->id, $orderValue))) { - $this->sys_language_content = $orderValue; // Setting content uid (but leaving the sys_language_uid) - break; - } + case 'content_fallback': + // is alternative fallback Order specified for content_fallback? use this instead sys_language_overlayCheckOrder + $fallBackOrder = $sys_language_content; + if ($fallBackOrderContent) { + $overlayLanguageUidForCurrentPage=$this->sys_page->getLanguageOverlayUidForPage($this->id,$fallBackOrderContent); } + else { + $overlayLanguageUidForCurrentPage=$this->sys_page->getLanguageOverlayUidForPage($this->id,$this->sys_language_overlayCheckOrder); + } + $this->sys_language_content=$overlayLanguageUidForCurrentPage; + // be aware of alternative Fallback language UIds for this page and load new overlayed record for this page + if ($overlayLanguageUidForCurrentPage>0) { + $this->page = $this->sys_page->getPageOverlay($this->page, $overlayLanguageUidForCurrentPage); + } break; case 'ignore': $this->sys_language_content = $this->sys_language_uid;