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ő:
$lang = $site->actlanguage;

if (empty($p_one)) $p_one = "company";

if (!in_array($p_one, $allow) and !empty($p_one))
{
	$sql = "SELECT * FROM menu WHERE (link1='$p_one' AND link2='$p_two' AND link3='$p_three' AND link4='$p_four')";
	$selmenu = $site->db->GetRow($sql);
	
	if (count($selmenu)==0)	header("Location: /");
}

switch ($p_one)
{
	case "hu":
	case "de":
	case "en":
		$_SESSION['language'] = $p_one;
		header("Location: /");
		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:
	if ($_SESSION['language'] == "")
		{
			session_register('language');	
			$_SESSION['language'] = DEFAULT_LANG;
		}
		
		$this->actlanguage = $_SESSION['language'];
		
		$this->smarty = new smarty();
		$this->smarty->compile_dir = SMARTY_COMPILE_DIR;
		$this->smarty->template_dir = SMARTY_TEMPLATE_DIR;
		$this->smarty->caching = SMARTY_ENABLE_CACHE;
		$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...
if (empty($p_one)) $p_one = "company";   

...teljesülni fog, mert $p_one üres...
rögtön ezután:
if (!in_array($p_one, $allow) and !empty($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!