[TYPO3-german] real url

Tolleiv Nietsch tolleiv at gmx.de
Thu Apr 20 14:39:40 CEST 2006


jens holze wrote:
> hallo,
> 
> ich habe eine seite erstellt, wo ich die sprachen deutsch (default) english
> und french habe . jetzt habe ich das problem, wenn z.b die französiche
> seiten noch nicht existiert, er mir einen fehler bringt, wenn ich im
> sprachmenu auf den link für french klicke. ich habe auch schon versucht die
> optionen im page.config bereich zu testen.
> 
> kann mir da einer eine lösung sagen.
> 
> am besten wäre es, wenn er dann die deutsch seie anzeiht. oder kann man eine
> fehler seite erstellen, die sagte das keine übersetzung angelegt wurde.
> 
> jens 
> 
> 

Hallo,

da gibt es viele Wege (ich geh mal davon aus das du die One-Tree Lösung 
gewählt hast)
wichtig ist in dem Zusammenhang das du bei deiner Seite (Seitenheader) 
einen Hacken bei "Verstecke Seite wenn keine Übersetzung für die 
aktuelle Sprache existiert" gemacht hast und je nachdem wie du das Menü 
zur Sprachumschaltung baust sollte ein Umschalten auch nur dann möglich 
sein wenn eine Übersetzung der aktuellen Seite existiert.

Sobald diese Sachen gegeben sind brauchst du im Prinzip das von die 
angestrebte Verhalten (bei Fehlern => Standardsprache) auch nichtmehr da 
nur noch übersetzte Inhalte dargestellt werden.

Für ein Sprachmenu nehm ich das folgende Script:
<?php

$tstemp = new t3lib_TStemplate();

# alle Alternavtivsprachen suchen
$query = "SELECT * FROM pages_language_overlay WHERE 
pid=".$GLOBALS["TSFE"]->id.$GLOBALS["TSFE"]->sys_page->enableFields("pages_language_overlay")." 
GROUP BY sys_language_uid";

$res = mysql(TYPO3_db,$query);
$langArr=array();
while($row=mysql_fetch_assoc($res))	{
	$langArr[$row["sys_language_uid"]]=$row["title"];
}

#HTML erzeugen
$languages = array();
for($i=1;$i<10;$i++)
{
	if(!preg_match('/^[a-z]{2}$/',$conf[$i])) break;
	$languages[$conf[$i]] = $conf[$i.'.'];
}


foreach($languages as $tag=>$element)
{
	$LD = $tstemp->linkData($GLOBALS['TSFE']->page,'' /* $oTarget */,''/* 
$no_cache */, ''/* $script */, ''/* $overrideArray */, 
'&L='.$element['uid'] /* $addParams */,  '0');
	$linkCur = $LD['totalURL'];
	$LD = $tstemp->linkData('','' /* $oTarget */,''/* $no_cache */, ''/* 
$script */, array('L'=>$element['uid'])/* $overrideArray */, '' /* 
$addParams */,  '0');
	$linkNull = $LD['totalURL'];					

	if($element['uid']  == 0 || $langArr[$element['uid']])	
		$flags[] = tslib_cObj::stdWrap('<a 
href="'.$linkCur.'">'.tslib_cObj::stdWrap('<img 
src="'.$conf['image.']['path'].$tag.$conf['image.']['postfix_found'].'" 
alt="'.$element["name"].'" class="flags" title="'.$element["name"].'" 
border="0"/>',$conf['image.']).'</a>',$conf);
	else
		$flags[] = tslib_cObj::stdWrap('<a 
href="'.$linkNull.'">'.tslib_cObj::stdWrap('<img 
src="'.$conf['image.']['path'].$tag.$conf['image.']['postfix_notfound'].'" 
alt="'.$element["name"].'" class="flags" title="'.$element["name"].'" 
border="0"/>',$conf['image.']).'</a>',$conf);
}

$content =  implode("",$flags);
?>

Im TS muss dann zB folgendes stehn:
config.sys_language_uid = 0
config.language = de
config.locale_all = de_DE

[globalVar = GP:L=1]
config.sys_language_uid = 1
config.language = en
config.locale_all = english

[global]
temp.lang = PHP_SCRIPT
temp.lang.file = fileadmin/scripts/languagemenu.php
temp.lang.wrap = |&nbsp;
temp.lang.image.path = fileadmin/images/flags/
temp.lang.image.postfix_found = .gif
temp.lang.image.postfix_notfound = _off.gif
temp.lang.1 = de
temp.lang.1.uid = 0
temp.lang.1.name = deutsch
temp.lang.2 = gb
temp.lang.2.uid = 1
temp.lang.2.name = english


Damit wird dann die Länderflagge nur noch verlinkt wenn auch eine 
Übersetzung vorhanden ist ...

Nur noch ne kurze Frage - was genau hast du dir denn bei dem Betreff 
gedacht?

Gruß Tolleiv



More information about the TYPO3-german mailing list