hallo,
falls es jemanden interessiert, ich hab hier ein kleines skript (was bestimmt sehr suboptimal ist, aber funktioniert!).
Ausgangssituation war, jemand englischsprachiges kommt über die suchmaschine auf die seite und wenn er auf englisch schalten will, dann landet er auf der startseite und muss erst wieder zum artikel finden. also habe ich für die wichtigen oberkategorien verknüpfungen erstellt.
teste es hier: http:__www.powertechnik.com/aid=3.phtml (auf englisch schalten)
bewerkstelligt habe ich es so:
datei
frontend_init/language_switch.php
Code: Select all
<?php
$lang[0]['lang'] = "de";
$lang[0]['id'] = "1";
$lang[0]['alias'] = "powertechnik"; //startseite deutsch
$lang[1]['lang'] = "en";
$lang[1]['id'] = "29";
$lang[1]['alias'] = "powertechnik_en"; //startseite englisch
// verknüpfung der IDS der korrospondierenden Strukturebenen
// um den language switch zu erleichtern
$lang[0]['link'] = array(
"1", //startseite
"4", //produkte
"13", //lautsprechersysteme
"15", //PA
"16", //EM
"18", //WF
"19", //G
"20", //spezial
"12" // Kontakt
);
$lang[1]['link'] = array(
"29", //startseite
"31", //produkte
"32", // lautsprechersysteme
"33", //PA
"34", //EM
"35", //WF
"36", //G
"37", //spezial
"53" // Kontakt
);
if(isset($LEVEL_ID[1]) && $LEVEL_ID[1] == $lang[1]['id']){
setcookie("setlang",$lang[1]['lang'],0,"/");
}else{
setcookie("setlang",$lang[0]['lang'],0,"/");
}
?>
datei
frontend_render/language_switch.php
Code: Select all
<?php
//print_r($LEVEL_ID[1]);
//print_r($GLOBALS);
if( ! (strpos($content["all"],'{LANG_SWITCH}')===false)) {
//in frontend_init werden die sprachen und dieverse übersetzungen definiert!
/*// -----------------------------------------------------------------------------
// suche die korrospondierende ID für die entsprechenden cat ID
# prüfen welche sprache / struktebene aktuell ist
1# die aktuelle cat_id im aktuellen lang array suchen und den key merken
2# wird kein definierter key gefunden, wird geprüft ob im LEVEL_ID ein Key forhanden ist, der definiert wurde,
also eine ebene höher gehen, dafür ist die funktion array_vergleich da.
3# sollte überhauptnix greifen, dann ebene 0 = startseite
*/
$link_arr_key = 0;
//echo $content["cat_id"];
function array_vergleich($a,$b) {
$keys = array_intersect($a,$b);
$key = array_search(end($keys),$b);
return $key;
}
foreach($lang as $key => $value){
//print_r(array_vergleich($LEVEL_ID,$value['link']));
$link_id = $content["cat_id"];
//echo $key."->";
#1
if (!array_search($link_id,$value['link'])=== false){
$link_arr_key = array_search($link_id,$value['link']);
//echo "definiert!";
break;
#2
}elseif(array_vergleich($LEVEL_ID,$value['link'])){
//$link_arr_key = (array_search(end($LEVEL_ID),$value['link']));
$link_arr_key = array_vergleich($LEVEL_ID,$value['link']);
break;
//echo "ebene hoch definiert!";
#3
}else{
//echo "nix - default";
$link_arr_key = 0;
}
}
// -----------------------------------------------------------------------------
$lang_switch = "";
foreach($lang as $key => $value){
if(isset($LEVEL_ID[1]) && $LEVEL_ID[1] == $value['id']){
$lang_switch .= '<img src="img/famfamfam/flag_icons/png/'.$value['lang'].'.png" alt="'.$value['lang'].'" class="active_lang" />';
}else{
$lang_switch .= '<a href="index.php?id='.$value['link'][$link_arr_key].',0,0,1,0,0">';
$lang_switch .= '<img src="img/famfamfam/flag_icons/png/'.$value['lang'].'.png" alt="'.$value['lang'].'" class="inactive_lang" />';
$lang_switch .= '</a>';
}
}
$lang_switch = '<div class="lang_switch">'.$lang_switch.'</div>';
$content["all"] = str_replace('{LANG_SWITCH}', $lang_switch, $content["all"]);
}
?>
{LANG_SWITCH} ins template schreiben, um die flaggen darzustellen (kann sein, das du die englandflagge der famfamfam icons in en.png umbennen musst, weil die mit gb.png ausgezeichnet ist)
hier noch das css für die flaggen:
Code: Select all
.lang_switch img {
border:0 none transparent;
/* border:1px solid red; */
margin-left:5px;
width:16px;
height:11px;
}
.lang_switch img.active_lang {
filter:alpha(opacity=50);
-moz-opacity:0.5;
opacity: 0.5;
}
.lang_switch {
text-align:right;
}
Noch kurz, In der 1. Datei werden die Referenzen zu den Seiten festgelegt und das Cookie der aktuellen sprache gesetzt.
Hier müssen die ganzen Array Variablen angepasst werden!
In der 2. Datei wird das Replacementtag ersetzt und mit dem Link zur anderssprachigen korrospondierenden Strukturebene versehen.
Ich hoffe das ist nachvollziehbar und funktioniert im besten falle gleich

Vielleicht hab ich auch was vergessen - bin grad in eile
grüße
marcus