Autor Zpráva
giovanni
Profil
Ahoj,
mám web, na který chodí návštěvníci z různých zemí. Potřeboval bych proto, aby se konkrétní návštěvní po kliknutí na tentýž odkaz dostal pokaždé na jinou stránku (půjde o stránku mimo můj web, ale takovou, která bude v jeho jazyce).
Příklad:
Mám na webu odkaz.
Když na něj klikne Čech, dostane se na www.nejakanemeckastranka.de
Když klikne Maďar, dostane se na www.nejakamadarskastranka.hu
Když klikne Slovák, dostane se na www.nejakaslovenskastranka.sk

Připomínám, že by se jednalo vždy o tentýž jediný odkaz, který by návštěvníky z různých zemí odkázal každého na jinou webovou stránku, v závislosti na IP adrese návštěvníka.

Jde toto nějak udělat? Pokud ano, prosím napište konkrétní postup.
Děkuji.
Tomášeek
Profil
giovanni:
A co když klikne Čech v maďarských lázních a tedy s maďarskou IP, který maďarsky neumí? Jaký má smysl klikat na jeden odkaz, když minimálně 2 ze 3 nebudou rozumět zbytku stránky a kontextu?

Někde jsi něco zjednodušil až příliš, něco podstatného zanedbal, viz výše. Každopádně, kontrola bude muset probíhat na cílové stránce, na kterou vede odkaz (a ta provede další přesměrování dále). Nebo IP kontroluj už v době tvorby odkazu a dej mu příslušný (záměrně nepíšu "správný", protože na to jdeš blbě) cíl odkazu.
Sennin
Profil
@giovanni
Ahoj len taká otázka nebolo by lepšie to vyriešiť select-om?
Kde by si užívateľ vybral jazyk alebo krajinu a to by ho potom presmerovalo na určitú stránku?
ako písal @Tomášeek A co když klikne Čech v maďarských lázních a tedy s maďarskou IP, který maďarsky neumí?

Či ty to aj tak chceš riešiť podľa IP?
giovanni
Profil
giovanni:
Chlapi, děkuji za odezvy, nicméně potřebuji to přes to všechno přesně tak, jak jsem napsal.
Jde o to, že mám webové stránky, staré cca 10 let, které navštěvují jak Češi, tak Slováci. Z těch stránek vedou odkazy. No a teď se něco změnilo a já potřebuju, aby pro návštěvníka z Čech ten odkaz, který tam je celé roky, vedl někam a tentýž odkaz, aby pro návštěvníka ze Slovenska vedl zase jinam. Návštěvníci jsou zvyklí tam chodit z obou zemí a nechci je nutit, aby uváděli, odkud přišli, apod. Navíc, nejedná se o jeden odkaz, ale o spousty odkazů všude možně na webu. A Čecha v maďarských lázních neřeším, když mu naběhne nějaký nesmysl, tak věřím, že mu dojde, že to je místem, kde se nachází. Navíc, většina Čechů tráví většinu času tady doma, jde o zanedbatelné procento. Není to zas tak neobvyklý požadavek. Když si dneska otevřete v cizině pár webů, tak často na vás začnou reklamy mluvit cizí řečí. Ale o to nejde, nežádám o kritiku, vím co dělám a co potřebuju - viz výše. Tak jestli někdo z vás ví, co s tím, prosím o konkrétní popis, konkrétní html kod, script, či cokoli, co to vyřeší.
Díky.
Davex
Profil
giovanni:
Ono to zadání není jednoznačné a skrývá různá úskalí. Kam třeba budeš chtít poslat lidi, kteří nebudou z Čech, Slovenska ani Maďarska nebo kam vyhledávače? Vyhledávačům se nemusí líbit, že budou přesměrováni jinam než uživatelé. Také by si to přesměrování mělo pamatovat poslední uživatelem zvolenou jazykovou variantu a přesměrovávat ho tam.

Možnosti obecně: Výběr jazyku stránky
Příklad přesměrování v PHP: rozpoznání jazyka a přesměrování
giovanni
Profil
giovanni:
Mi se zdálo, že jsem to napsal naprosto jednoznačně, ale je fakt, že to každý může vidět jinak. Abych to upřesnil a zjednodušil:
Na můj web, který mám již přes 10 let, chodí návštěvníci z různých zemí, převažuje Česko a Slovensko. Vedou z něj linky na různé obchody, kde mohli nakupovat jak Češi, tak Slováci. Teď některé obchody přestaly dodávat zboží do Čech, takže nemá smysl, abych na ně posílal české zákazníky. Na druhé straně, Slováci přes tytéž odkazy mohou stále nakupovat. A nechci u každého odkazu dávat vyplnit dotazník, odkud návštěvník přišel. Takže potřebuju, aby v tom odkazu bylo nějaké IP kritérium, které návštěvníka pošle tam, kde může koupit zboží.
Přesněji řečeno:
- pro návštěvníky z Čech - odkaz na www.novyobchod.cz
- pro návštěvníky ze Slovenska a z celičkého okolního světa: - odkaz na www.staryobchod.cz

Davex: Aby si přesměrování pamatovalo poslední uživatelem zvolenou jazykovou mutaci, na tom netrvám, může to být dvojsečné, protože jak tady byl zmíněn ten případ s Čechem v maďarském termálu, tak kdyby z toho místa ten člověk poprvé v životě web navštívil, tak by mu to hodilo špatnou jazykovou mutaci a i když by se pak přemístil do Čech a tam strávil zbytek života, tak už by byl "pořád Maďar" :-).

Vyhledávače neřeším, nemyslím, že by to byl nějaký zásadní problém. Vždyť dnes kdejaký obchod, nabízející webmasterům spolupráci, nabízí tzv. geo-bannery, které se mění v závislosti na IP adrese návštěvníka. Některé posílají návštěvníka na různé jazkové mutace na témže webu a některé posílají návštěvníky na weby, které jsou na různých doménách. A já chci defakto totéž, Čechy poslat na nový obchod, zbytek světa na starý obchod, při zachování starých odkazů. Prostě, aby se pro návštěvníka na webu nic nezměnilo. Zůstanou tam pro něj všechny odkazy na místech, na které byl zvyklý. A pokud to bude Čech, tak ho ten starý odkaz hodí do nového obchodu. Je to vážně tak složitá věc? Pokud někdo víte co s tím, tak prosím, zkuste fakt poslat tentokrát konkrétní skript, či html kód, kterým by to šlo vyřešit. Já ho odzkouším a buď to bude fungovat nebo ne.
Díky.
Keeehi
Profil
<?php
include("geoip.inc");
$gi = geoip_open("GeoIP.dat", GEOIP_STANDARD);
$zeme = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);

switch ($zeme) {
    case 'CZ': echo '<a href="odkaz ma eShop pro cechy">Jdi ma eshop</a>'; break;
    case 'SK': echo '<a href="odkaz ma eShop pro slováky">Jdi ma eshop</a>'; break;
    case 'HU': echo '<a href="odkaz ma eShop pro maďary">Jdi ma eshop</a>'; break;
    default: echo '<a href="odkaz ma eShop pro ostatní">Jdi ma eshop</a>'; break;
}
?>

Musíš si k tomu stáhnout databázi IP adres geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
A knihovnu, která s tím pracuje. github.com/maxmind/geoip-api-php/blob/master/src/geoip.inc

A jen tak mimochodem, vzal jsem to z článku na který byl odkaz v tom, co ti už posílal Davex v [#5]
Enko
Profil
Jenom doplním svůj postřeh. Multijazyčné stránky dělám už několik let a vždycky uživatele směruju na jazykovou mutaci podle jazyka jaký má nastavený v prohlížeči. Je na to celkem jednoduchá detekce. Ze své vlastní zkušenosti vím, že například google i microsoft na svých stránkách volí jazykovou mutaci právě podle toho, ze které země tam jdu. I přestože jsem v prohlížeči v účtu google přihlášení v češtině, tak mi všechny google stránky (vyhledávač, mapy, atd...) zobrazuje v polštině a to jen protože jsem připojený do firemní VPN, která má bránu do internetu v Polsku, což mě dost štvě. Stejně tak jako dává predikce na vyhledávání pro Polsko. Zkus si toto chování na vlastní kůži a sám se pak rozhodneš, jaké řešení zvolíš. Rozlišovat jen podle geolokace IP je hloupost.
giovanni
Profil
giovanni:
Chlapi, děkuju všem, zatím mi to tu sice hází nějakou chybu v řádku 1544 :-), ale zkusím se s tím nějak popasovat :-).


Enko:
Tenhle přístup, jak tohle vyřešit, mě vůbec nenapadl. Zní to celkem logicky a chci to zkusit. Prosím tě, mohl bys mi napsat co s tím - jak detekovat ten jazyk v prohlížeči a následně poslat návštěvníka na konkrétní web? Pokud je to něco složitějšího, rád Ti za to zaplatím jako za zakázku. Případně mi napiš na mail karel.ventura @ gmail.com
Enko
Profil
giovanni:
Není potřeba nic platit, je to dost primitivní. Tuto funkci mi tu kdysi před lety taky někdo poradil, ale už nevím kdo. Tady máš celé osekané řešení.

<?php
function prefered_lang(){
  if(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])){
    preg_match_all('#([a-z-]+) *(?:; *q=([0-9.]+))?#', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $matches);
    $accept = array_combine($matches[1], $matches[2]);
    //doplni vychozi hodnoty, zaroven prevede na typ float
    foreach($accept as $key => $val)
      $accept[$key] = $val == '' ? 1.0 : (float) $val;
    arsort($accept);
    return substr(array_shift(array_keys($accept)),0,2);
  }
  else{
    return DEFAULT_LANG;
  }
}


    //detekce cestiny nebo slovenstiny
if((prefered_lang() == "cs") or (prefered_lang() == "sk")){
  header("Location: http://www.ceskyneboslovenskyweb.cz/", true, 303);
  exit;
}
//detekce anglictiny
elseif(prefered_lang() == "en"){
  header("Location: http://www.anglickyweb.cz/", true, 303);
  exit;
}
//defaultni jazyk, pokud nema uyivatel nastaven zadny z predchozich jazyku
else{
  header("Location: http://www.anglickyweb.cz/", true, 303);
  exit;
}
?>
Keeehi
Profil
giovanni:
Tenhle přístup, jak tohle vyřešit, mě vůbec nenapadl.
To si snad děláš *****! Ty vůbec nečteš, co ti tu lidé radí! V prvním článku, co ti poslal Davex v [#5] je o detekci jazyka prohlížeče psáno hned v úvodu.
giovanni
Profil
Keeehi:
Omlouvám se Keeshi, přehlédl jsem to.


Enko:
Ahoj, píšu ještě jednou, sorry, že furt otravuju, musím už tady působit fakt jako trotl :-). Ale já jsem v podstatě normální blogger a s těmahle věcma přicházím do styku jen zřídka...

Když jsem použil ten skript, s tím, že jsem jej upravil pouze tak, že jsem tam vložil ty aktuální URL adresy, kam má být směřován odkaz, tak mi to vypsalo následujicí chybovou hlášku:

Warning: Cannot modify header information - headers already sent by (output started at /home/content/41/8813841/html/aaaa.php:1) in /home/content/41/8813841/html/aaaa.php on line 20

Na řádku 20 je toto:
header("Location: www.ceskyneboslovenskyweb.cz", true, 303);

Tak se chci zeptat, mám v tom skriptu kromě toho, kam má vést odkaz, ještě nastavit něco dalšího?
Případně, co může být špatně?
Díky.
Keeehi
Profil
Zkusit header nahradit za
echo '<a href="http://www.anglickyweb.cz/">odkaz</a>';
giovanni
Profil
Keeehi:
Díky, je to lepší v tom, že je to bez chybových hlášek, ale vzniká tam bohužel takový mezistupeň.
Poté, co klient klikne na soubor.php, tak se objeví bílé okno, nahoře s linkem "odkaz" a on musí na něj zase znovu kliknout - pak ho to správně přesměruje na www.anglickyweb.cz
Potřeboval bych to tak, aby poté, co klikne na ten soubor.php ho to rovnou hodilo na konkrétní URL adresu, aniž by musel někam dále klikat. Jde to nějak upravit?
Tomášeek
Profil
giovanni:
BOM.

Než se zeptáš, co to je, zkus hledat.
giovanni
Profil
Tomášeek:
Já potřebuji jen fungující skript, to je celé. Všichni mi píšou, že to je v podstatě jednoduché, občas mě tu někdo seřve, že jsem nepozorný, že nesleduju, co mi lidi píšou, že mám nejdřív hledat, apod. Pravda je, že na to, jak je to jednoduché, tak prozatím jsem neměl to štěstí, aby mi to někdo poslal tak, že to opravdu bude fungovat. No a k tvému příspěvku - Začínám mít pochybnosti, jsem na diskuzním foru pro IT specialisty, nebo pro výchovné poradce... Protože jestli jo, tak leckomu by ta výchova šla líp, než mi jednoduše poslat fungující skript :-)
Tomášeek
Profil
giovanni:
Já potřebuji jen fungující skript, to je celé.
Ano. A odpověď k němu je (na 99%) BOM. Co jsi na té odpovědi nepochopil? Poslal jsem tě hledat konkrétní věc, kterou ani není možné odstranit nikým jiným, než jsi ty sám.

Ale místo toho, aby sis přečetl, co píšu (mimo tuto diskusi), tak radši kopeš kolem sebe. Já potřebuju, já chci, já, já, já...
Keeehi
Profil
giovanni:
Díky, je to lepší v tom, že je to bez chybových hlášek, ale vzniká tam bohužel takový mezistupeň.
OK, ono totiž nebylo jasné, kam to dáváš. Máš v podstatě 2 možnosti. Můžeš to teď celé vzít a dát na místo na té stránce, kde je ten odkaz.

Nebo se vrátíš k původní verzi s header v tom samostatném souboru jak to máš teď a zajistíš, že před <?php nebude jakýkoli výstup. Žádný text, ani mezery nejsou povoleny. I když už nic v editoru před <?php nevidíš a pokud ti to stejně nefunguje, tak problém bude ten BOM. Některé editory na začátek souboru přidávají neviditelné znaky, které určují kódování souboru a tyto neviditelné znaky potom působí ty problémy. Je to tak častý problém, že o tom máme napsané i ve zdejším php FAQ Nejčastější potíže s PHP (FAQ) » Headers already sent… a Nejčastější potíže s PHP (FAQ) » Divný znak (čtvereček) na začátku includovaného souboru v UTF-8.

Osobně bych si vybral tu první variantu. Výhodou je, že šetří jedno zbytečné přesměrování.
giovanni
Profil
Chlapi,
všem, kteří se mi snažili pomoci a poslali nějaké ty skripty, ať už fungovaly, či nikoli, chci upřímně poděkovat, protože hlavně díky vám jsem problém nakonec vyřešil a vše funguje, jak má. Mám ten svůj funkční skript, jak jsem ho tu furt egoisticky vyžadoval :-)... Jo a Tomášku, BOM v tom nebyl - příště si o tom něco nastuduj, ale ne, nic ve zlém :-).
Hezký víkend přeji!
Davex
Profil
giovanni:
Můžeš prosím ukázat, jak ten funkční skript vypadá, abychom se poučili a pomohlo to někomu dalšímu, který bude řešit stejný problém?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: