Seite 1 von 1

Sprache wechselt scheinbar willkürlich (vpNavigation 0.2)

Verfasst: Mi 7. Dez 2005, 13:16
von tommo
Hallo zusammen,
ich habe auf einer Seite die vpNavigation 0.2 von Ingo van Peeren eingebaut. Funktioniert soweit wunderbar. Befinde ich mich auf der englischen Seite, springt die Sprache scheinbar willkürlich zwischen deutsch und englisch hin- und her. :cry:

Contenido-Version ist die 4.6.2.

Wer's mal testen will: :arrow: http://www.coachkontor.com

Woran kann das liegen :?:

Danke,
Tom

Verfasst: Mi 7. Dez 2005, 13:24
von rezeptionist
willkürlich ok habe jetzt mal 2 minuten hin und her geklickt aber konnte es nicht nachvollziehen mal browsercache leeren


greets

Verfasst: Mi 7. Dez 2005, 13:26
von silicone
Ich auch nicht ...


Firefox 1.5
WinXP SP2

Verfasst: Mi 7. Dez 2005, 13:28
von emergence
das hängt einerseits mit dem browser cache zusammen und anderseits das du bei den meisten links den lang parameter nicht mit ausgibst...

eine ergänzung von &lang=$lang bei automatisch generierten links sollte dein problem lösen...

Verfasst: Mi 7. Dez 2005, 14:11
von tommo
Vielen Dan für die Antworten.

Ich hab jetzt mal die Variable $lang eingetragen, leider scheint diese nicht befüllt zu sein.
Hier mal der Output-Code

Code: Alles auswählen

<?php 
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :       vpNavigation 0.2 
* Author      :     Ingo van Peeren 
* Copyright   :     Ingo van Peeren (ingo@van-peeren.de) 
* Created     :     30-03-2005 
* Modified    :     16-07-2005 
************************************************/ 

$hauptkategorie = "CMS_VALUE[0]"; 

$navitems = array(); 

function nav_feld ($cat) { 
global $client, $lang, $cfg, $idcat; 

        if (!is_object($db)) { 
            $db = new DB_Contenido; 
        } 
        $sql = "SELECT 
                     A.idcat, 
                     B.parentid, 
                     C.name 
                   FROM 
                     ".$cfg["tab"]["cat_tree"]." AS A, 
                     ".$cfg["tab"]["cat"]." AS B, 
                     ".$cfg["tab"]["cat_lang"]." AS C 
                   WHERE 
                     A.idcat     = B.idcat   AND 
                     B.idcat     = C.idcat   AND 
                     B.idclient  = '$client' AND 
                     C.idlang    = '$lang'   AND 
                     C.visible   = '1'       AND 
                     B.parentid  = '$cat' 
                  ORDER BY 
                     A.idtree"; 

         $db->query($sql); 

         while ( $db->next_record() ) { 
            $aktiv = ""; 
            $sub_feld = nav_feld($db->f("idcat")); 
            if ($db->f("idcat") == $idcat) $aktiv = "active"; 
            elseif ($sub_feld["activepath"]) $aktiv = "activepath"; 
            $nav_feld[] = array("idcat"      => $db->f("idcat"), 
                                "name"       => $db->f("name"), 
                                "active"     => $aktiv, 
                                "sub"        => $sub_feld); 
            if ($aktiv != "") $activepath = $aktiv; 
         } 
         $rv = array("feld"          => $nav_feld, 
                     "activepath"    => $activepath); 
         return $rv; 
} 

function liste ($array, $indent = "  ") 
{ 
global $first; 

       if (is_array($array["feld"])) { 
         if ($first) { 
           echo $indent . "<ul id=\"nav\">\n"; 
           $first = 0; 
         } 
         else echo $indent . "<ul class=\"nav2\">\n"; 
         foreach ($array["feld"] as $menupunkt) { 
           if ($menupunkt["active"] == "active") echo $indent . $indent . "<li id=\"active\">\n"; 
           elseif ($menupunkt["active"] == "activepath") echo $indent . $indent . "<li class=\"activepath\">\n"; 
           else echo $indent . $indent . "<li>\n"; 
           if (is_array($menupunkt["sub"]["feld"])) { 
             echo $indent . $indent . $indent . "<a class=\"navi\" href=\"front_content.php?lang=" . $lang . "&idcat=" . $menupunkt["idcat"] . "\">" . $menupunkt["name"] . "</a>\n"; 
             liste($menupunkt["sub"], $indent."    "); 
           } 
           else echo $indent . $indent . $indent . "<a class=\"navi\" href=\"front_content.php?lang= . $lang . &idcat=" . $menupunkt["idcat"] . "\">" . $menupunkt["name"] . "</a>\n"; 
           echo $indent . $indent . "</li>\n"; 
         } 
         echo $indent . "</ul>\n"; 
       } 
} 

/* Create Navigation Array */ 
$navitems = nav_feld($hauptkategorie); 

$first = 1; 

liste($navitems); 

?> 

Tom :(

Verfasst: Mi 7. Dez 2005, 14:22
von Dodger77
Da passt doch was nicht. Probier mal:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :       vpNavigation 0.2
* Author      :     Ingo van Peeren
* Copyright   :     Ingo van Peeren (ingo@van-peeren.de)
* Created     :     30-03-2005
* Modified    :     16-07-2005
************************************************/

$hauptkategorie = "CMS_VALUE[0]";

$navitems = array();

function nav_feld ($cat) {
global $client, $lang, $cfg, $idcat;

        if (!is_object($db)) {
            $db = new DB_Contenido;
        }
        $sql = "SELECT
                     A.idcat,
                     B.parentid,
                     C.name
                   FROM
                     ".$cfg["tab"]["cat_tree"]." AS A,
                     ".$cfg["tab"]["cat"]." AS B,
                     ".$cfg["tab"]["cat_lang"]." AS C
                   WHERE
                     A.idcat     = B.idcat   AND
                     B.idcat     = C.idcat   AND
                     B.idclient  = '$client' AND
                     C.idlang    = '$lang'   AND
                     C.visible   = '1'       AND
                     B.parentid  = '$cat'
                  ORDER BY
                     A.idtree";

         $db->query($sql);

         while ( $db->next_record() ) {
            $aktiv = "";
            $sub_feld = nav_feld($db->f("idcat"));
            if ($db->f("idcat") == $idcat) $aktiv = "active";
            elseif ($sub_feld["activepath"]) $aktiv = "activepath";
            $nav_feld[] = array("idcat"      => $db->f("idcat"),
                                "name"       => $db->f("name"),
                                "active"     => $aktiv,
                                "sub"        => $sub_feld);
            if ($aktiv != "") $activepath = $aktiv;
         }
         $rv = array("feld"          => $nav_feld,
                     "activepath"    => $activepath);
         return $rv;
}

function liste ($array, $indent = "  ")
{
global $first, $lang;

       if (is_array($array["feld"])) {
         if ($first) {
           echo $indent . "<ul id=\"nav\">\n";
           $first = 0;
         }
         else echo $indent . "<ul class=\"nav2\">\n";
         foreach ($array["feld"] as $menupunkt) {
           if ($menupunkt["active"] == "active") echo $indent . $indent . "<li id=\"active\">\n";
           elseif ($menupunkt["active"] == "activepath") echo $indent . $indent . "<li class=\"activepath\">\n";
           else echo $indent . $indent . "<li>\n";
           if (is_array($menupunkt["sub"]["feld"])) {
             echo $indent . $indent . $indent . "<a class=\"navi\" href=\"front_content.php?lang=" . $lang . "&idcat=" . $menupunkt["idcat"] . "\">" . $menupunkt["name"] . "</a>\n";
             liste($menupunkt["sub"], $indent."    ");
           }
           else echo $indent . $indent . $indent . "<a class=\"navi\" href=\"front_content.php?lang=" . $lang . "&idcat=" . $menupunkt["idcat"] . "\">" . $menupunkt["name"] . "</a>\n";
           echo $indent . $indent . "</li>\n";
         }
         echo $indent . "</ul>\n";
       }
}

/* Create Navigation Array */
$navitems = nav_feld($hauptkategorie);

$first = 1;

liste($navitems);

?> 

Verfasst: Mi 7. Dez 2005, 14:36
von tommo
Hi Dodger77,

ich hab zwar noch nicht geschaut, was Du geändert hast aber es scheint zu klappen :lol:

Vielen Dank für Deine (Eure) Hilfe. :D

Tom :)

Verfasst: Mi 7. Dez 2005, 14:42
von Dodger77
tommo hat geschrieben:Hi Dodger77,

ich hab zwar noch nicht geschaut, was Du geändert hast aber es scheint zu klappen :lol:

Vielen Dank für Deine (Eure) Hilfe. :D
Gern geschehen. Deine anderen Module geben "$lang" übrigens auch nicht mit aus. Die Sache ist halt, dass Sprachwechsel im Prinzp nur dann vernünftig laufen, wenn der Besucher Cookies aktiviert hat. Andernfalls musst du alles umbauen, wo interne Links ohne "$lang" ausgegeben werden.

Verfasst: Mi 7. Dez 2005, 14:52
von tommo
Ach so :roll:

Was ist denn, wenn im Tiny links eingetragen werden?

Tom

Verfasst: Do 8. Dez 2005, 19:38
von HerrB
Die aktuell verwendete Sprache des Nutzers wird in der Session gespeichert - die Information, welche Session-ID der Nutzer gerade hat, im Cookie.

Wenn ein Nutzer das erste Mal auf die Webseite geht, erhält er die Webseite in der Standardsprache, die in der config.php im Mandanten-Verzeichnis eingetragen ist.

Wechselt nun der Nutzer über ein Sprachwechsel-Modul oder Angabe &changelang=<ID> die Sprache, wird diese Änderung in der Session gespeichert. D.h. es genügt i.A. nur einmal die Sprache zu wechseln und er ist in der anderen Sprache.

Wenn der Nutzer jedoch keinen Session-Cookie zulässt, geht die Information, in welcher Sprache sich der Nutzer befindet, ständig verloren. Abhilfe schafft hier nur, alle Links mit $lang zu versehen (man beachte den Unterschied zwischen $lang und $changelang).

Wird ein Link im tinyMCE eingetragen, verfügt er nicht über $lang. Wenn man es also ganz wasserdicht machen möchte, müsste man jeden Link manuell anpassen.

Gruß
HerrB