ugrás a tartalomhoz

php session

sitebuilder · 2010. Május. 12. (Sze), 15.04
Hello

Egy sessionban($_SESSION['site_lang']) tárolva vannak az oldal nyelvválasztásához szükséges értékek: hu, en, de, es.
Ezeket egy set_lang.php a kiválasztott nyelvet a nyelvhez tartozó aldomainre irányítja át

switch ($_GET['lang']) {
case "hu":
header("Location: http://www.domain.hu/fooldal");
exit;
break;
case "en":
header("Location: http://www.angol.domain.hu/fooldal");
exit;
break;
case "de":
header("Location: http://www.nemet.domain.hu/fooldal");
exit;
break;
case "es":
header("Location: http://www.spanyol.domain.hu/fooldal");
exit;
break;
}

Akármelyik nyelvet választom csak az angol tartalmat jeleníti meg. Az átirányítás megtörténik, de mindenhol az angol tartalommal.
Egyedi fejlesztésű cms

Mi okozhatja ezt?
 
1

Előző téma

janoszen · 2010. Május. 12. (Sze), 15.24
Teljesen jó lett volna, ha az előző témát folytatod. A probléma egyébként valószínűlet az, hogy www.domained.hu a fődomained és ezért a sütik a www.domained.hu-ra vonatkoznak és nem mennek át az aldomainekre.
2

Hogyan lehetne ezt megoldani?

sitebuilder · 2010. Május. 12. (Sze), 15.30
Hogyan lehetne ezt megoldani? Tudnál segíteni ebben?
4

setcookie ( "lang" , "hu" , 0

Ifju · 2010. Május. 12. (Sze), 17.19
setcookie ( "lang" , "hu" , 0 , "/", ".domain.hu");
Ez a következő oldalbetöltéskor a $_COOKIE['lang'] változóba beállítja a "hu" értéket, a domain.hu domainre és aldomainjeire addig, amíg böngésződet be nem zárod.

setcookie funkció leírása a dokumentációban példákkal.
9

sajnos nem működik a

sitebuilder · 2010. Május. 13. (Cs), 09.05
sajnos nem működik
a megfelelő domainre átirányítja, de csak az angol nyelvhez tartozó szöveg jelenik meg bármelyik nyelv kiválasztása esetén
21

Több domain esetén

alkony4 · 2015. Okt. 29. (Cs), 18.31
Üdvözlet!

Az iménti sor elvégzi, hogy a domain.hu összes aldomainjére beállítja az adott cookiet, rendben.
Viszont volna egy olyan kérdésem, hogy miként oldható ez meg ha egy adott szerverre, ip-re etc... nem egy hanem egy rakat domain mutat ami bővül is, ott miként lehet beállítani, hogy az összes domainhez beállítsak egy cookiet nem csak az aldomainekhez?

Megtisztelő válaszotok előre is köszönöm.
3

egyszerűbb

neogee · 2010. Május. 12. (Sze), 16.22
Szerintem nem kell feltétlenül külön subdomainekre bontani... főleg ha ugyis tárolod session-ben, hogy melyik nyelv az aktiv éppen... Én most csinálok egy ismerősömnek egy többnyelvű oldalt, és egészen egyszerűen úgy csinálom, hogy sessionben tárolom a nyelvet, van minden nyelvhez egy ini fileom, ami weblap feliratait tartalmazza, és nagyon egyszerüen csak fogom, és a nyelvnek megfelelő init töltöm be, és annak a feliratait iratom ki. :) Szerintem ez elég egyszerű megoldás... és nem kell mindenféle subdomainekkel okoskodni meg ilyen süti, olyan süti :)

de egyébként ha annyira subdomainezni akarsz, vagy nem akarsz de muszáj, akkor szerintem ne sessionben tárold el a nyelvet, hanem inkább sütiben, és akkor be tudod állitani a sütinek ügye hogy melyik domainre vonatkozzon melyik könyvtárra és hasonlo finomságok. Br szerintem az igazi megoldás, az továbbra is a külön fileban tárolt feliratok kombinálva a sütivel, aminek megvan továbbá az az előnye, hogy nem kell a felhasználónak minden egyes alkalommal kiválasztania a nyelvet, hanem azon a nyelven jelenik meg legközelebb az oldal amin legutoljára használta. :)
Remélem tudtam segíteni, ha esetleg szükséges van példakódra, vagy bármire, akkor a neogee##kukac##freemail.hu cimen megtalálsz :)
5

Nem jó

janoszen · 2010. Május. 12. (Sze), 17.23
Nem jó ötlet. Ha a különböző nyelvi változatoknak nincs külön URL-je, akkor sajnos bele fogsz abba szaladni, hogy a Google random verziókat fog becachelni és igen nagyon szenvedni fog a besorolásod tőle.
6

nem fog

neogee · 2010. Május. 12. (Sze), 17.32
nem fog, mert a lap alapértelmezetten magyarul jelenik meg :) Külön állítani kell a másik nyelvet, és csak az mentődik a böngészőben :) amennyiben nem létezik a süti, mindig a magyar lapot jeleníti meg :) tudtommal a google pedig nem követi a képek onclick eseményeit :)

De javíts ki ha tévedek, és szívesen veszem az egyéb megoldási javaslatokat is. Subdomain beállítására sajnos egyébként nincsen lehetőség. az urlhez fűzött nyelvi beállítás pedig számomra nem igazán szimpatikus, meg szerintem bonyolultabb a kivitelezés is :)
7

Megoldas

janoszen · 2010. Május. 12. (Sze), 19.08
Ez is egy megoldas, de ha mar ajanlod hivd fol a figyelmet a veszelyekre is.

A gugli altal ajanlott modszer ha tetszik, ha nem a nyelv URLbe kodolasa.
8

igazad van

neogee · 2010. Május. 12. (Sze), 20.19
Ebben teljesen igazad van... valoban félrevezető volt amit tanácsoltam sorry :S
Ellenben, engem nagyon érdekelne szerinted hogyan kellene megvalósitani, mert olyan nagyon sok többnyelvű rendszert még én sem írtam... :) És szívesebben tanulok adott esetben egy tapasztaltabbtól :) Nyitott vagyok az újabb elgondolásokra... igazából én az asztali alkalmazásoknál használt megoldást próbáltam átültetni web alapokra... :)
11

Példa

janoszen · 2010. Május. 13. (Cs), 11.57
Egy lehetséges megoldás: van egy director a www-s aldomainen, az megnéz a felhasználóról mindenféle paramétert (pl esetleg beállított preferencia sütit is) és ez alapján dobja át egyik vagy másik subdomainre. Ha Google-ra fut, akkor mindig az angol oldalra dobja (ez azért kell, mert a Google nem jól kezeli ezt a fajta permanent redirectet, keverni fogja a nyelvi változatokat).
10

A sütivel való kivitelezés

sitebuilder · 2010. Május. 13. (Cs), 09.21
A sütivel való kivitelezés nem jó.
A legnagyobb probléma az, hogy most lacalhoston nem működik a kiválasztott nyelvhez tartozó tartalom megjelenítése, ami eddig ment. A másik, hogy az admin felületre sem enged be, adatbázisban viszont naplózza, hogy beléptem, pedig nem.
12

get vagy session?

csman007 · 2010. Május. 13. (Cs), 12.18
döntsd el hogy melyiket használod mert ugye vagy nem látom a teljes kódot amit kell vagy pedig eleve gettel semmit sem kap a getből mivel sessionözöl. Mondjuk ha switchet átállítod esetleg akkor még még talán működni is fog.
13

Így néz ki a set_lang.php

sitebuilder · 2010. Május. 13. (Cs), 15.47
Így néz ki a set_lang.php ideiglenes session-el, de mégsem a választott nyelvnek megfelelő tartalom jelenik meg csak újbóli kattintásra

include_once($_SERVER['DOCUMENT_ROOT'].'/includes/site_config.inc.php');
if( isset( $_GET['lang'] )) {
$_SESSION['site_lang'] = $_GET['lang'];
}

if (isset($_SESSION['nyelv']) && $_SESSION['nyelv']!=''){

    switch ($_SESSION['nyelv']) {
            case "hu":
                     
                    header("Location: http://www.domain.hu/fooldal");
                unset($_SESSION['nyelv']);

                exit;

            break;
            case "en":
         
                header("Location: http://www.angol.domain.hu/fooldal");
              unset($_SESSION['nyelv']);

                exit;

            break;
            case "de":
         
                header("Location: http://www.nemet.domain.hu/fooldal");
                unset($_SESSION['nyelv']);

                exit;

            break;
            case "es":
         
                header("Location: http://www.spanyol.domain.hu/fooldal");
                unset($_SESSION['nyelv']);

exit;


break;
}
}
switch ($_GET['lang']) {
case "hu":
$_SESSION['nyelv']='hu';


header("Location: http://www.domain.hu/fooldal");

exit;
break;
case "en":
$_SESSION['nyelv']='en';
header("Location: http://www.angol.domain.hu/fooldal");
exit;
break;
case "de":
$_SESSION['nyelv']='de';
header("Location: http://www.nemet.domain.hu/fooldal");
exit;
break;
case "es":
$_SESSION['nyelv']='es';
header("Location: http://www.spanyol.domain.hu/fooldal");
exit;
break;
default:
header("Location: http://www.domain.hu/fooldal");
}
14

Külön URL-ek

csla · 2010. Május. 13. (Cs), 16.16
Én a többnyelvű verziót úgy szoktam megoldani, hogy külön URL-en jelennek meg, és nincs a nyelv jelezve benne.
Pl.: www.domain.hu/hasznos-linkek és www.domain.hu/useful-links
A nyelvet adatbázisban tárolom el az adott tartalomhoz. Ha olyan URL-t kér le valaki, ami magyar, akkor a magyar menüt kapja (vagyis a magyar tartalmakat szűröm le, és rendezem menübe), ha angolt, akkor az angolt, és így tovább. A nyelvváltás pedig egyszerűen egy link a másik nyelvű kezdőlapra.
Az adatbázisban egy kapcsolómezőben össze lehet rendelni az azonos, csak különböző nyelvű tartalmakat, így - ha létezik az adott tartalom a kért nyelven - akkor lehet közvetlenül arra is váltani.
Nem kell se session, se cookie, Google is eltehet mindent külön címen.
15

hasonló

neogee · 2010. Május. 13. (Cs), 18.18
Ez merőben hasonló az általam használt rendszerhez, valójában a különbség annyi, hogy én nem az urlből bogarászom ki a nyelvet a link alapján, hanem eltároltatom a usernél... tegye ő is hasznossá magát ha már van ilyen lehetőség... :) illetve én nem adatbázisban tárolom ügye, a menüt és az egyéb feliratokat, hanem több <nyelv>_labels.ini fileban :)

Ellenben ez az url-es saját nyelves dolog ez hasznos lehet. :) Bár én személy szerint nem kifejezetten tartom fontosnak hogy a felhasználó tisztában legyen azzal hogy mi van az urlben... :)
Azt azért kifejthetnéd nekem, ha nem titok, hogy hogyan végzed mondjuk a domain.hu/hasznos-linkek urlből a nyelv kiszűrését... :) ez érdekelne, mert én valahogy ugy tudom elképzzelni a dolgot, hogy valamiféle változóban tárolod hogy melyik linkhez melyik nyelv tartozik, kár egy tömbben akár objektumban, bármiben, és az alapján hajtod végre a lekérdezést. Ez viszont szerintem nem túl rugalmas megoldás ha valóban igy van, én jobbszeretem a teljesen autómatizált dolgokat... :) fogja az alkalmazás megpróbálja megkeresni a nyelvi filet, ha találja akkor beszippantja a tartalmat és megjelenit mindent a megfelelő helyen, ha pedig nem találja akkor a default nyelvi file töltődik be. :) és nem kell flagelni a dolgokat, hanem teljesen önállóan tudja mit kell tennie:) továbbá a lekérdezés összeállítása is kifejezetten egyszerü, hiszen csak annyit mondok hogy:
SELECT * FROM $lang_table stb stb

Tulajdonképpen a konfigurációs fileom dönti el, hogy a usernl beállitott nyelv definiálva van e az oldal számára egyáltalán vagy sem, továbbá azt is, hogy választott-e már a felhasználó nyelvet. Ha még nem választott vagy nem értelmezett az oldal esetében süti aktuális értéke - mondjuk az van benne hogy kis-pista, ilyen nyelv ugye nincsen... - akkor autómatikusan beállitódik a SITELANG konstans értéke a config.ini ben definiált alapértelmezett nyelvi értékre. :) Ezzel megelőztem azt is hogy bele tudjanak piszkálni és bármilyen nem odaillő dolgot megegyen a sütiből az alkalmazás, illetve a google problémája is megoldodott :)
16

így?

csman007 · 2010. Május. 13. (Cs), 18.43
próbáld meg esetleg így mondjuk nem szokott gond lenni, de ki tudja:

switch ($_GET['lang']) {
case hu:
$_SESSION['nyelv']='hu';


header("Location: http://www.domain.hu/fooldal");

exit;
break;
case en:
$_SESSION['nyelv']='en';
header("Location: http://www.angol.domain.hu/fooldal");
exit;
break;
case de:
$_SESSION['nyelv']='de';
header("Location: http://www.nemet.domain.hu/fooldal");
exit;
break;
case es:
$_SESSION['nyelv']='es';
header("Location: http://www.spanyol.domain.hu/fooldal");
exit;
break;
default:
header("Location: http://www.domain.hu/fooldal");
}
meg esetleg egy
@session_start()
17

miért session?

stan · 2010. Május. 14. (P), 16.34
Szerintem a SESSION nem praktikus erre a célra.

Tegyük fel, hogy González úr, aki egyébként először jár az oldalon, kiválasztja a spanyol nyelvet, mivel ő csak ezt érti. De közben el kell mennie ebédszünetre, ezért bezárja a böngészőjét. Miközben eszi a húslevest, azon gondolkodik, hogy még nem tudott mindent elolvasni az oldaladon, ezért úgy dönt, amint visszaér a menzáról, rögtön visszalátogat az oldaladra. De amikor González úr újra beírja a weboldalad címét a böngészőjébe, értelenkedik, mert újra ki kell választania a spanyol nyelvet, hiszen a SESSION már nem érvényes.

Ha azonban cookie-t használtál volna, mondjuk 1 év érvényességel, nem hiszem, hogy a közeljövőben lesz ilyen jellegű problémája a felhasználónak. Hacsak nem vált át másik böngészőre, vagy nem törli a cookie-kat.
18

igen

neogee · 2010. Május. 18. (K), 12.29
igen, ezt javasoltam én is, ám ez felvet egy másik problémát... teszem azt, más is használja az adott számítógépet. user1 kiválasztja a spanyol nyelvet szépen, majd jön user2 és egy szót nem fog érteni a weblapból. persze nyilván ha az ember egyértelmű jelzéseket használ a nyelv kiválasztására, pl zászlókat, akkor nem fog gondot okozni neki, hogy átállítsa, de ahhoz viszont tényleg egyértelmű jelzéseket kell akkor adni. :)

Egyébként én is ezzel a mwegoldással értek egyet, mert nagyon sok helyen minden böngészés alkalmával ki kell választani a nyelvet.. és engem is bosszant sokszor :S
19

mekkora az esélye?

stan · 2010. Május. 18. (K), 18.25
Egy munkahelyen, egy háztartásban, egy webkávézóban az esetek túlnyomó részében azonos nyelvet beszélő emberek élnek. Tehát az általad említett esetnek az esélye jóval kisebb, mint hogy egy nyelvet beszélő embereknek többször kelljen kiválasztani az adott nyelvet.

Egyébként az automatikus nyelv kiválasztása php-vel lehet egy jó megoldás:
http://www.tutorial.hu/automatikus-es-manualis-nyelvvalasztas/
20

kicsi

neogee · 2010. Május. 18. (K), 21.16
hát valóban nem túl nagy az esélye, ám a suliban azt tanitották, hogy az alkalmazást fel kell késziteni a szélsőséges esetekre is... :) nyilván mindenre nem lehet, és nyilván a legjobb megoldás ez a sütis dolog. egyébként szerintem a webkávézők kilőve alapból, mert szerintem a netkávézókban egyébként sem tárolják a sütiket :) legalábbis ha nekem lenne netkávézóm én max a bezárásig engedném tárolni :)