Seite 7 von 8

Verfasst: Mo 28. Feb 2005, 23:01
von Halchteranerin
bei walterco geht's. Vielleicht ist emergences Loesung auch nur fuer 4.5, ich habe ja 4.4.4 ...

Verfasst: Di 1. Mär 2005, 00:28
von JSommer
Jo, gucke mal bitte :)

Verfasst: Di 1. Mär 2005, 09:42
von HerrB
@Halchteranerin: Also bei mir funktionieren Deine Seiten, ich kann keinen Fehler mehr feststellen.

Aus den Links
können ansonsten client und lang entfallen (client ergibt sich aus dem Verzeichnis und was besseres als load_client jibbet wohl nich'). Ist der Parameter changelang vorhanden, überschreibt er lang.

Gruß
HerrB

Verfasst: Di 1. Mär 2005, 09:53
von emergence
mein code snippet ersetzt in der 4.4.4 & in der 4.4.5 (front_content.php)
folgendes (sowohl bei allen mandanten als auch bei external/frontend und im snapshot bei external/backendedit)

Code: Alles auswählen

// Sprache wechseln
if (isset($changelang)) $lang = $changelang;

// Client wechseln
if (isset($changeclient)){
    $client = $changeclient;
    unset($lang);
}

// Client initialisieren
if (!isset($client)) {
        $sess->register("client");
        //load_client defined in frontend/config.php
        $client = $load_client;
}

// Initialize language
if (!isset($lang)) {
    $sess->register("lang");
    //if is an entry load_lang in frontend/config.php use it,    else use the first language of this client
    if(isset($load_lang)){
        //load_client is set in    frontend/config.php
        $lang = $load_lang;

    }else{

        $sql = "SELECT
                    A.idlang
                FROM
                    ".$cfg["tab"]["clients"]." AS A,
                    ".$cfg["tab"]["lang"]." AS B
                WHERE
                    idclient='$client' AND
                    A.idlang=B.idlang AND
                    B.active='1'
                LIMIT
                    0,1";

        $db->query($sql);
        $db->next_record();
        
        $lang = $db->f("idlang");

    }
}
im letzten snapshot ist das ebenso ident vorhanden...

soweit ich das jetzt gesehen habe dürfte es funktionieren...

anscheinend ist die funktionsweise noch nicht 100%ig klar...

sollte die seite beim ersten aufruf ohne lang oder changelang aufgerufen werden wird der gesetzte wert $load_lang verwendet um $lang in der session zu speichern...

beim ersten aufruf der seite mit $lang wird genau diese sprache geladen und der wert wird in der session gespeichert.

beim aufruf mit $changelang wird dieser wert als $lang gesetzt und gespeichert.

zusätzlich $changelang ist höherwertig als $lang...

ein sprachwechsel auf eine andere sprache ist nach dem ersten aufruf nur mit changelang möglich...
nur durch angabe von $lang ändert sich der in der session gesetzte wert für $lang nicht mehr..

selbe gilt für $client und $changeclient

Verfasst: Di 1. Mär 2005, 18:02
von JSommer
Saubere Sache! Danke! Bitte gleich mit in die neue CVS integrieren :)

Verfasst: Di 1. Mär 2005, 19:07
von Halchteranerin
Hallo,

HerrB, anfangs dachte ich, du wolltest mich nur aergern (als du schriebst, du kannst keinen Fehler feststellen, meine ich. ;-) Dann habe ich aber nochmal getestet. Ergebnis: unter http://www.christa-und-oliver.de/violeta, also Originalseite, funktioniert's (danke an alle Beteiligten :) ), unter http://www.vila-violeta.de.vu, wo die Originalseite in einem Frameset eingebunden wird, funktioniert's leider immer noch nicht.
Dafuer gibt's aber wohl keine Loesung, oder?

Gruss
Christa

Verfasst: Di 1. Mär 2005, 19:25
von HerrB
Ja, so einen Effekt hatte ich während der Tests (mittendrin) auch, am Schluss nicht mehr.

Ich gucke es mir nochmal an, aber ich vermute nein - jetzt mal ins Blaue geraten, nehme ich an, dass er die Sprache nicht speichert, da die Domain, für die er den Cookie anlegt, später nicht mehr mit der Domain der Seite übereinstimmt (genau genommen speichert er nicht nicht die Sprache, sondern findet seine Session nicht wieder).

Ich guck's mir nochmal an.

Gruß
HerrB

Verfasst: Di 1. Mär 2005, 22:31
von HerrB
Jetzt wird es lustig.

a) Bei walterco scheint es immer zu gehen
b) Bei http://www.christa-und-oliver.de/violeta scheint es immer zu gehen
c) http://www.vila-violeta.de.vu (ist ein Frame, in den die eigentlichen Seiten geladen werden) funktioniert mit Firefox, jedoch tritt mit dem IE6 das bereits bekannte Problem auf

Wird bei c) der IE verwendet, funktioniert auch nicht das Umschalten über die Flaggen. Ich nehme an, dass das ein Sicherheitsfeature des IE ist und er tatsächlich seine Session nicht wiederfindet.

Da fällt mir gerade nix ein...

Es gab da mal diese base-Angabe in HTML, vielleicht hilft das was.

Gruß
HerrB

Verfasst: Di 1. Mär 2005, 23:06
von Halchteranerin
HerrB hat geschrieben:c) http://www.vila-violeta.de.vu (ist ein Frame, in den die eigentlichen Seiten geladen werden) funktioniert mit Firefox, jedoch tritt mit dem IE6 das bereits bekannte Problem auf
Stimmt, jetzt wird's mir bewusst, dass ich in letzter Zeit nur mit IE getestet habe. Grund: ich benutze Firefox zum Surfen, und um zu vermeiden, dass irgendwas aus dem Cache oder sonstwoher genommen wird, oder ein vorheriges Cookie benutzt wird, habe ich immer zum Testen den IE gestartet.
HerrB hat geschrieben:Wird bei c) der IE verwendet, funktioniert auch nicht das Umschalten über die Flaggen.
Hmm, ich habe das gerade getestet, bei mir funktioniert das ueber die Flaggen. Einziges Problem ist das von Anfang, wenn ich von der Startseite aus eine Sprache anklicke und anschliessend einen Menuepunkt (in der angeklickten Sprache) auswaehle.

Ob ich auf der statischen Seite einen 5sprachigen Hinweis (eigentlich reichen 4 Sprachen, denn die erste funktioniert immer ;-) ) aufnehmen soll, dass IE-Benutzer zur Not nochmal die jeweilige Landesflagge anklicken muessen, falls ihnen die Sprache fremd vorkommt? :lol:

Gruss
Christa

Verfasst: Sa 26. Mär 2005, 03:45
von JSommer
ist dieser bugfix jetzt eigentlich in der aktuellen cvs integriert? :-O

Verfasst: Mi 27. Apr 2005, 13:45
von timo
Ich habe die letzte Version von emergence mal eingebaut, wäre nett, wenn das jemand am Freitag prüfen konnte ;)

Verfasst: Mi 27. Apr 2005, 14:50
von JSommer
werd ich mir anschauen - kommende woche! :)

Verfasst: Mi 27. Apr 2005, 16:52
von HerrB
Wobei ich vorschlagen würde, die Zeile

Code: Alles auswählen

// Sprache wechseln 
if (isset($changelang)) $lang = $changelang;
unter

Code: Alles auswählen

// Client wechseln 
if (isset($changeclient)){ 
    $client = $changeclient; 
    unset($lang); 
}
zu setzen.

Hintergrund: Sind Sprache und Client für den Nicht-Standardfall über changelang und changeclient angegeben, wird die Angabe zu changelang ohne diese Änderung schlicht ignoriert.

Enthält nun die Mandanten-config.php im entsprechenden Verzeichnis nur den Standardwert für die Sprache, entsteht Murks: $client wird auf $changeclient gesetzt, aber $lang auf den Wert aus der config.php (der ja für den Standardclient und damit nie für den i.A. vom Standard abweichenden und daher angegegeben Client gilt) gesetzt.

Mit der Änderung werden beide Angaben beachtet, bei Angabe von nur $changelang ändert sich nichts, bei Angaben von nur $changeclient tritt das gewohnte Verhalten auf (d.h. es wird versucht, die Sprache aus der config.php zu verwenden). Nur, wenn $changeclient definiert und $load_lang nicht definiert sind, wird die DB zu Rate gezogen.

Gruß
HerrB

Verfasst: Sa 30. Apr 2005, 13:03
von emergence
@HerrB
...kein schlechter punkt

ich nehm mal den code von aktuellen snapshot 2005-04-29

Code: Alles auswählen

// Sprache wechseln
if (isset($changelang)) $lang = $changelang;

// Client wechseln
if (isset($changeclient)){
    $client = $changeclient;
    unset($lang);
}

// Client initialisieren
if (!isset($client)) {
        $sess->register("client");
        //load_client defined in frontend/config.php
        $client = $load_client;
}

// Initialize language
if (!isset($lang)) {
    $sess->register("lang");
    //if is an entry load_lang in frontend/config.php use it,    else use the first language of this client
    if(isset($load_lang)){
        //load_client is set in    frontend/config.php
        $lang = $load_lang;

    }else{

        $sql = "SELECT
                    A.idlang
                FROM
                    ".$cfg["tab"]["clients"]." AS A,
                    ".$cfg["tab"]["lang"]." AS B
                WHERE
                    idclient='$client' AND
                    A.idlang=B.idlang AND
                    B.active='1'
                LIMIT
                    0,1";

        $db->query($sql);
        $db->next_record();
       
        $lang = $db->f("idlang");

    }
} 

if (!$sess->is_registered("lang") ) $sess->register("lang");
if (!$sess->is_registered("client") ) $sess->register("client");
und ersetze ihn durch das hier...

Code: Alles auswählen

// Change client 
if (isset($changeclient)){ 
    $client = $changeclient; 
    unset($lang);
    unset($load_lang); 
} 

// Change language 
if (isset($changelang)) $lang = $changelang;

// Initialize client 
if (!isset($client)) { 

    //load_client defined in frontend/config.php 
    $client = $load_client; 
} 

// Initialize language 
if (!isset($lang)) { 

    //if there is an entry load_lang in frontend/config.php use it, else use the first language of this client 
    if(isset($load_lang)){ 
        //load_client is set in frontend/config.php 
        $lang = $load_lang; 

    }else{ 

        $sql = "SELECT 
                    B.idlang 
                FROM 
                    ".$cfg["tab"]["clients_lang"]." AS A, 
                    ".$cfg["tab"]["lang"]." AS B 
                WHERE 
                    A.idclient='$client' AND 
                    A.idlang = B.idlang AND 
                    B.active='1' 
                LIMIT 
                    0,1"; 

        $db->query($sql); 
        $db->next_record(); 
        
        $lang = $db->f("idlang"); 

    } 
} 

if (!$sess->is_registered("lang") ) $sess->register("lang"); 
if (!$sess->is_registered("client") ) $sess->register("client");
im prinzip wird zusätzlich zum mandanten wechsel ein unset($load_lang);
ausgeführt...
sollte nun changelang nicht gesetzt sein wird die erste verfügbare sprache des neuen mandanten aus der db selektiert... (da $load_lang nicht mehr gesetzt ist)

@timo
$sess->register("lang");
$sess->register("client");

könnte man noch entfernen...

Verfasst: Do 2. Jun 2005, 14:02
von timo
emergence hat geschrieben:@timo
$sess->register("lang");
$sess->register("client");

könnte man noch entfernen...
wo?