Sprache wechselt scheinbar willkürlich (vpNavigation 0.2)

Gesperrt
tommo
Beiträge: 120
Registriert: So 27. Jun 2004, 21:34
Kontaktdaten:

Sprache wechselt scheinbar willkürlich (vpNavigation 0.2)

Beitrag 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
rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist »

willkürlich ok habe jetzt mal 2 minuten hin und her geklickt aber konnte es nicht nachvollziehen mal browsercache leeren


greets
greets
silicone
Beiträge: 299
Registriert: Di 15. Mär 2005, 10:33
Kontaktdaten:

Beitrag von silicone »

Ich auch nicht ...


Firefox 1.5
WinXP SP2
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
tommo
Beiträge: 120
Registriert: So 27. Jun 2004, 21:34
Kontaktdaten:

Beitrag 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 :(
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag 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);

?> 
tommo
Beiträge: 120
Registriert: So 27. Jun 2004, 21:34
Kontaktdaten:

Beitrag 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 :)
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag 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.
tommo
Beiträge: 120
Registriert: So 27. Jun 2004, 21:34
Kontaktdaten:

Beitrag von tommo »

Ach so :roll:

Was ist denn, wenn im Tiny links eingetragen werden?

Tom
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Gesperrt