Autor | Zpráva | ||
---|---|---|---|
libris Profil |
#1 · Zasláno: 15. 4. 2009, 12:30:35
Ahoj, pokouším se dělat stránky s několika zakykovými mutacemi. Doposud jse je dělal přes url adresy a pomocí mod_rewrite. Problém je ale v tom že někdo chce jednojazyčné stránky, někdo zase vícejazyčné. Když vytvořím třeba aktuality pro vícejazyčný web a potřebuju ho použít jen pro jednojazyčný, tak ho musím kompletně ošetřit, tzn. všechny proměnné ve kterých mám překlady vyhodit a napsat to tam na tvrdo. Nebo aktuality nechat pro vícejazyčný web, ale v url adrese bych musel pořád udržovat /cs/, aby se mi do proměnných načítal český text. Napadlo mě proč to neudělat přes session. Sice hledání chyb bude zřejmě složitější, ale mělo by to vyřešit můj problém.
Napsal jsem si kod, který by měl do $_SESSION vložit aktuální jazyk. Chci se zeptat zkušenějších programátorů, zda by to tak mohlo být nebo by kód napsali jinak? session_start(); if(isset($_GET["lg"])): $_SESSION["lg"] = $_GET["lg"]; elseif(!isset($_SESSION["lg"])): $_SESSION["lg"] = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']); $_SESSION["lg"] = strtolower(substr(chop($_SESSION["lg"][0]),0,2)); elseif(($_SESSION["lg"]<>"cs")&&($_SESSION["lg"]<>"de")&&($_SESSION["lg"]<>"en")): $_SESSION["lg"]="en"; endif; require("config".$_SESSION["lg"].".php"); //nahraje se config s aktualni mutaci |
||
ninja Profil |
#2 · Zasláno: 15. 4. 2009, 12:51:55
Resit jazyk pres session a ne pomoci URL je u vetsiny webovych stranek velmi spatny napad.
|
||
tiso Profil |
#3 · Zasláno: 15. 4. 2009, 12:55:35
libris - týmto spôsobom odstrihneš robotov od ostatných jazykových verzií, takže vo vyhľadávačoch budeš mať len jednu. Okrem toho je blbosť mať pod jednou url rôzny obsah, nebude sa dať na ne odkazovať.
|
||
libris Profil |
#4 · Zasláno: 15. 4. 2009, 12:59:01
„Resit jazyk pres session a ne pomoci URL je u vetsiny webovych stranek velmi spatny napad.“
Tak jak jinak udělat třeba e-shop aby fungoval jak jen pro jednu jazykovou verzi tak jako vícejazyčný. Teď to třeba řeším tak že když mám jen jednujazyčnou verzi tak je adresa www.nazev.cz/cs/ abych nemusel přepisovat proměnné za skutečné texty, ale mohl to tahat ze souboru configcs.php. Protože už mám nachystaný e-shop jako vícejazyčný. |
||
srigi Profil |
#5 · Zasláno: 15. 4. 2009, 13:00:43
libris
Tak ako pisu ninja a tiso, neprenasaj jazykovu mutaciu v SESSION! Ak nekces pri jednojazykovej stranka mat identifikator jazyka v URL, kukni sa na moje riesenie. |
||
ninja Profil |
#6 · Zasláno: 15. 4. 2009, 14:29:08
libris: co je spatneho na adrese http://www.example.com/cs/ ? Nebo to jde delat parametrem - http://www.example.com?hl=cs
|
||
libris Profil |
#7 · Zasláno: 15. 4. 2009, 14:44:03
ninja: Mě osobně tam nevadí /cs/, ale klientům. Proč tam má být /cs/, když jsou stránky jen v češtině. A vysvětlujte jim pak že modul pro jejich stránky je nachystaný pro vícejazyčný web, tak abych to nemusel předělávat... Jde mi o to abych měl určitý modul nachystaní jak pro jednojazyčnou verzi stránek, tak pro vícejazyčné stránky a nemusel to při každých nových stránkách předělávat.
|
||
imploder Profil |
#8 · Zasláno: 15. 4. 2009, 14:52:36 · Upravil/a: imploder
libris
nevyřešil by to v tom případě rewrite na "/" - že by se přistoupilo na /cs/ (které je asi dál rozepsané rewritem na skript s parametrama), ale nebylo by vidět? |
||
tiso Profil |
#9 · Zasláno: 15. 4. 2009, 15:00:09
libris - takže chyba je v tom, že tvoj modul nefunguje pri jednojazyčnej verzii. Porozmýšľaj ako ho upraviť.
|
||
libris Profil |
#10 · Zasláno: 15. 4. 2009, 15:07:30
imploder: to mě taky napadlo jestli by to nešlo jen v .htaccess nastavit tak, že když bude $lg=cs, tak by se /cs/ vůbec nezobrazilo. Ale to nevím jak udělat (pokud by to šlo).
v .htaccess používám toto: RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/$ index\.php?lg=$1 [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/([^/]+)?/?$ $2\.php?lg=$1 [L,QSA] |
||
avaster Profil |
#11 · Zasláno: 15. 4. 2009, 15:31:37
skus im vystvetlit ze je to pre ich dobro; ze ked budu chciet rozsirovat web tak maju o starost menej a teda aj menej nakladov s tym spojenych...
|
||
tiso Profil |
#12 · Zasláno: 15. 4. 2009, 15:36:54
avaster - to nie je správne riešenie problému...
|
||
Mastodont Profil |
#13 · Zasláno: 15. 4. 2009, 15:45:46
No a co takhle se úplně vykašlat na .htaccess a udělat to v aplikaci? Rozdělit _SERVER['REQUEST_URI'] na jednotlivé díly, první by byl implicitně jazyk, pokud by první díl neobsahoval žádný jazyk, nastavit jazyk na default ...
|
||
srigi Profil |
#14 · Zasláno: 15. 4. 2009, 16:23:19
Mastodont
Presne tak to riesim v tom mojom clanku. Identifikator jazyka sa overuje reularnym vyrazom. |
||
Mastodont Profil |
#15 · Zasláno: 15. 4. 2009, 16:33:38
srigi
JJ, akorát to array_shift - array_unshift nechápu, stačí přece testovat $parts[0] ... |
||
Časová prodleva: 4 dny
|
|||
libris Profil |
#16 · Zasláno: 19. 4. 2009, 19:17:58
srigi
Opravdu pěkný článek, hned jsem ho přes víkend studoval a zkoušel. Kdy uveřejníš třetí část kapitoly? Mám menší problém s OOP, teoreticky ho trochu chápu, ale neumím ho použít v praxi :-(. |
||
srigi Profil |
#17 · Zasláno: 19. 4. 2009, 22:31:34
libris
Vdaka za prijemnu odozvu. Ja som naopak vikend stravil reinstalom systemu, az teraz (Nedela vecer 9:00pm) mam vsetko rozbehane a nastavene, takze do prace na programovani sa mozem pustit az odteraz. Este musim premysliet, co to vlasnte bude robit, kcel by som totiz predviest Zend_Db v plnej parade (kaskadovanie nad MyIsam tabulkami a pod.). Ale snad uz coskoro. |
||
Časová prodleva: 15 let
|
0