ugrás a tartalomhoz

nyelvválasztás probléma

mario82 · 2007. Nov. 19. (H), 13.10
Sziasztok

A következő problémám lenne: ha a nyelvet kiválasztom az oldalon ( www.xxx.hu/en, www.xxx.hu/hu ) eltűnik a /hu, /en...
ezáltal linkelni sem tudok az adott nyelvre " www.xxx.hu/hu/bemutatkozas/cegunkrol " adom meg, akkor nem a magyar oldal jelenik meg...hanem az alapértelmezett angol.


a kód a következő:
  1. $lang = $site->actlanguage;  
  2.   
  3. if (emptyempty($p_one)) $p_one = "company";  
  4.   
  5. if (!in_array($p_one$allowand !emptyempty($p_one))  
  6. {  
  7.     $sql = "SELECT * FROM menu WHERE (link1='$p_one' AND link2='$p_two' AND link3='$p_three' AND link4='$p_four')";  
  8.     $selmenu = $site->db->GetRow($sql);  
  9.       
  10.     if (count($selmenu)==0) header("Location: /");  
  11. }  
  12.   
  13. switch ($p_one)  
  14. {  
  15.     case "hu":  
  16.     case "de":  
  17.     case "en":  
  18.         $_SESSION['language'] = $p_one;  
  19.         header("Location: /");  
  20.         break;  
 
1

kérdések, kérdések és kérdések

zila · 2007. Nov. 19. (H), 16.56
A $lang változót mire használod? A $site->actlanguage honnan és hogyan kap értéket? Miért teszed át az értékét a $lang változóba, amit ráadásul nem is használsz sehol (legalábbis a fenti kódrészletben nem)
A $p_one változó micsoda? (nyelv nem lehet, mert nem hallottam még olyan nyelvről, hogy 'company'.

Ne csodálkozz ha eltűnik a nyelv az url-ből, ha te magad tünteted el: header("Location: /");

A location header kiadása nem jelenti az automatikus átirányítást, a script többi része lefut, így könnyen lehet, hogy nem az fog történni amit várnál. Ha nem szeretnéd futtatni a kód további részét, akkor használd az exit() függvényt a header után. Ha nem ez a cél, akkor természetesen nem szóltam :)
2

Re:

mario82 · 2007. Nov. 19. (H), 18.36
Szia

if (empty($p_one)) $p_one = "company"; - alapértelmezettként a "company"-t hozza be :-)

$p_one, $p_two stb... az aloldalakat jelöli

actlanguage pedig a smartyban is jelen van:
  1. if ($_SESSION['language'] == "")  
  2.     {  
  3.         session_register('language');     
  4.         $_SESSION['language'] = DEFAULT_LANG;  
  5.     }  
  6.       
  7.     $this->actlanguage = $_SESSION['language'];  
  8.       
  9.     $this->smarty = new smarty();  
  10.     $this->smarty->compile_dir = SMARTY_COMPILE_DIR;  
  11.     $this->smarty->template_dir = SMARTY_TEMPLATE_DIR;  
  12.     $this->smarty->caching = SMARTY_ENABLE_CACHE;  
  13.     $this->smarty->cache_lifetime = SMARTY_CACHE_LIFETIME;  
Köszi!
3

Nem könnyíted meg

zila · 2007. Nov. 19. (H), 21.56
if (empty($p_one)) $p_one = "company"; - alapértelmezettként a "company"-t hozza be :-)

Erre rájöttem ám... Csak arra próbáltam célozni, hogy kevered a szezont a fazonnal. Az eredeti kódrészletben néhány sorral a $p_one = "company" értékadás után a nyelvet ellenőrzöd a $p_one változó alapján... Ugyanakkor szerepel a kódodban egy $lang változó amit nem használsz, egy $_SESSION['language'] amit használsz ugyan csak nem tudom mire (az, hogy értékül adod egy osztályváltozónak az még nem felhasználás). Felteszem átadod a template-nek (ami azért lenne gyönyörű, mert a session-ben tárolt változókhoz automatiksan hozzáférsz a template-ből)... Meg van még $this->actlanguage is, ami ugyanaz mint a $_SESSION['language']... Miért?

Szerinted ezzel a kijelentéseddel segítesz?

actlanguage pedig a smartyban is jelen van


Az derült ki, hogy a $_SESSION['language'] belemegy elsőként a az osztályod actlanguage változójába, amit később átpakolsz a $lang változóba és elfelejted (gondolom sok a memória, ezért pazarolni kell keveset), mert helyette inkább a $p_one-t nézed ami lehet 'company' vagy 'hu', 'en', 'de' és még bármi, a switch folytatódik a gépeden.

$p_xxx az aloldalakat jelöli, ok. Honnan kap értéket? tegyük fel az url-ből. Ha $p_one valamilyen nyelvet jelöl, akkor location=/
paraméterek nélkül, így ha a kódodat egy controller-ből (sic!) idézed akkor ez a feltétel...
  1. if (emptyempty($p_one)) $p_one = "company";     

...teljesülni fog, mert $p_one üres...
rögtön ezután:
  1. if (!in_array($p_one$allowand !emptyempty($p_one))  
Feltételezem a "company" benne van az $allow tömbben, hiszen alapértelmezett oldal. $p_one immáron nem üres ez a feltétel is teljesül. Lekérdezed az oldalhoz tartozó menüt. Ha nincs menü egy oldalhoz, akkor a script végrehajtása után goto root (location = /)

Innen nem tudom tovább futtatni, premature end of file.
4

Re: Re:

mario82 · 2007. Nov. 20. (K), 15.27
Kedves Zila

Kicsit belekeveredtem... :-) De még tovább próbálkozom...
Köszönöm a segitséged!