Autor Zpráva
Super Grill
Profil *
Dobrý den, dělám teď takový malinký projektík a chtěl bych se zeptat. Stránku píši v osmi jazycích a viděl bych to nějak takhle. Nový vávštěvník zadá URL mého webu, načte se mu index.php v kterém bude kód, který zjistí, že se přihlásil poprvé, tak ho to přesměruje na /choose-language.php kde si bude moci vybrat z jednoho z jazyků (obyčejné obrázkové buttony), ty ho přesměrují na /en/index.php nebo jakýkoli jiný jazyk, podle toho, na co klikl a když přijde na stránku podruhé, tak ho index.php rovnou přesměruje na jím zvolený jazyk. Nemám vůbec tušení, jak napsat kód, co zjistí, zda jsem novým návštěvníkem a který do browseru návštěvníka uloží nějaký cookie, podle kterého zjisti, jaký je jeho primární jazyk (ten co zvolil). To je bohužel á jediná překážka. To jak udělat button a dát mu funkci, to vím, až tak blbej nejsem, tak s tím se obtěžovat nemusíte. Jen mi někdo prosím napište, jakým způsobem se to dá udělat, jakých fukcí využít a já si s tím snad dál poradím. Diky moc všem za odpovědi. :)
anonymníí
Profil *
Super Grill:
Správně víš, že jsou to cookies... Tak šup na php.net a začni studovat, jak se s nimi pracuje. Moc složité to není a zajímat tě bude jedna funkce na vytvoření cookie, kontrolu pak budeš provádět proti superglobálnímu poli $_COOKIE.
RastyAmateur
Profil
Super Grill:
Je to jednoduché. anonymníí má pravdu, že by bylo lepší nejdříve hledat, ale i přes to ti poradím.

Není dobré to dělat přes cookies. Lépe řečeno není to nejlepší. Co budeš dělat, když uživatel bude chtít změnit jazyk? Pokud bys to udělal tak, aby to bylo přenosné v URL (example.cz/cz/hlavni-strana, example.cz/en/hlavni-strana), bylo by to asi nejlepší. Četl jsem právě na toto téma jeden článek, ale zrovna teď jsem ho nenašel. Na jecas jsem ho pomocí vyhledávání nenašel.

Teď ke scriptu. Cookies zapisuješ pomocí funkce setcookie() a nadále s nimi pracuješ (respektive s ním - polem) jako s jinýma proměnnýma. Nyní si skus sám vytvořit kód. Pokud nebudeš vědět tak napiš a já ti to pošlu...

Malá ukázka:
<?php
setcookie("jmeno","Daniel",(time()+(60*60*24*365))); # Vytvořená na 1 rok
echo $_COOKIE["jmeno"]; #Vypíše "Daniel"

setcookie("pole",array("prvni" => 1, "druhy" =>2),(time()+(60*60*24*365))); # Vytvořené pole v cookies na 1 rok
echo $_COOKIE["pole"]["druhy"]; # Vypíše "2"

setcookie("jmeno",""); # Vymaže cookie "jmeno"
setcookie("pole",""); # Vymaže cookie "pole"
?>
lionel messi
Profil
RastyAmateur:
Dovolím si menšiu korekciu:

Malá ukázka:

Žiaľ, nebude fungovať správne, vygeneruje sa chyba Headers already sent, keďže na r. 3 vypisuješ výstup, ale vzápätí opäť pracuješ so setcookie. Tebou odkázaná dokumentácia funkcie spomenuté správanie taktiež výslovne uvádza spolu s odôvodnením (česky je to v FAQ, pozri môj odkaz).
anonymníí
Profil *
RastyAmateur:
Cookie se na toto právě hodí. Dva hlavní důvody:

1. Cookie si bude prohlížeč pamatovat i pro další návštěvy a nabídne preferovaný jazyk, což je i v zadání. Jak bys to bez cookies řešil, když nejsou nejlepší?

2. Identifikátor jazyka v URL bude, taktéž se o tom v dotazu tazatel zmiňuje. Jen tam bude, předpokládám, trochu inteligentněji, tzn. en/homepage místo en/hlavni-strana.

Když bude chtít změnit jazyk, tak ho změní (třeba kliknutím na vlaječku v záhlaví, nebo volbou ze selectu) - vybere nový jazyk a přeuloží cookie.
Super Grill
Profil *
RastyAmateur:
Díky moc za odpověď a za tvůj čas. A ano, budu to mít jako "přenosné" URL repektive domena.net/en/index.php nebo domena.net/cz/index.php. Moc se omlouvám, budeš si myslet, že jsem opravdu veliký hlupák, ale já umím spíše v HTML, snažím se teď ještě pochopit CSS, ale když dojde na scripty jak v javě, PHP, a jiné, jsem vážně mimo. Četl jsem si kód a.. Vážně mi nejde hlavy jak to zapsat. Ten kód přečtu a chápu, dokáži si i představit jeho funkci, ale nenapadá mě, jak mi to, že něco může vypsat něco a tim on bude přesměrován. Resp. chapu, že slovo "druhy" je spolčený s "2" ale nemám vůbec šanjna, jak by mi to pomohlo.. Vážně se moc omlouvám, jsem v tom vážně nový, ještě juknu na NET, něco si o tom přečtu, pak dám vědět. :D
RastyAmateur
Profil
lionel messi:
Aha, tak to je i pro mě novinka. Cookies spíše nepoužívám. Děkuji :-)

anonymníí:
Nesouhlasím. Já se ovšem špatně vyjádřil. Udělal bych to nějak takhle ($_GET["lang"] získáš pomocí htaccess)
<?php
if(!empty($_GET["lang"])){
  # Vložit stránku s jazykem
  }
else{
  if(!empty($_COOKIE["lang"])){
    # Přesměrovat na stránku s jazykem
    }
  else{
    # Vložit stránku s nastavením jazyka
    }
  }
?>
Super Grill
Profil *
Takže jsem našel tenhle kód na stackoverflow, vypadá to, že by fo mohlo fungovat, takže di to hodím na FTP a vyzkouším:
$(function () {

var url = 'your_url';
var english_page = 'eng/index.html';
var dutch_page = 'nl/index.html';

if ($.cookie('default_page') != null) {
if (window.location.href != url + '/' + $.cookie('default_page')) {
window.location.href = url + '/' + $.cookie('default_page');
}
}

$('#set_english_butt').click(function () {
$.cookie('default_page', english_page, { expires: 999 });
alert('English was set as the default language');
});

$('#set_dutch_butt').click(function () {
$.cookie('default_page', dutch_page, { expires: 999 });
alert('Dutch was set as the default language');
});

});


Jsem zrovna na mobilu, takže se mi to zrovna blbě vkládá a prohlížeč mi hazí error 500. Kouknu se na to ještě zítra, až budu na PC, když tak sem ještě napíšu. :)


Tady ne celý článek, aby pokud tohle bude další ztracená ovce (jako já) číst, aby věděl jak na to. Je k tomu ještě o třeba stáhnout jQuery script.stackoverflow.com/questions/11383839/remember-preferable-language
Keeehi
Profil
Super Grill:
Až na to, že javascript mohou mít návštěvníci vypnutý. Proto je dobré to řešit v PHP na straně serveru, jak už vám tu psali kolegové předemnou.
anonymníí
Profil *
RastyAmateur [#7]:
Nesouhlasím...
To nevím s čím.

Reagoval jsem na to, že jsi psal, že cookies na toto vhodné nejsou. A ejhle, v tom samém příspěvku je máš. Ten pseudokód je v zásadě v pořádku, ale nikde jsem nepsal, že to tak nefunguje.

Víceméně podmínka na neprázdnost COOKIE koresponduje s tím, co jsem psal dříve, a sice bod 1) - zadám adresu ve tvaru example.com a na základě cookie budu přesměrován na mnou preferovaný jazyk, pokud na webu nejsem poprvé. Bez cookies neřešitelné => proto jsem nesouhlasil s tvrzením, že cookies na toto vhodné nejsou (resp. mě zajímalo, co dle tebe vhodné je, teď vidím dle dalších příspěvků, že v tom máš akorát guláš a cookies vlastně ano :-) ).
RastyAmateur
Profil
anonymníí:
Ano, špatně jsem se vyjádřil... Chtěl jsem napsat něco ve smyslu "mít to jen na cookies"..
Super Grill
Profil *
Takže jak bude výsledný kód? No, nejdřív to musí mit tlačítka, takže:
<button id= "en">English</button> 
A pak další buttony s jinými ID. Velký problém teď ale bude, udelat kód, který zapíše cookies a poté přesměruje na specifickou adresu example.com/en/index.php. Vážně jsem hledal a nic jinýho, než kód v JQuery jsem nenašel, tak zda by jste byl někdo tak hodný a napsal mi kód pro tenhle jeden jazyk? Zbytek bych zduplikoval a přepsal ID, aby mi to šlo na víc buttonů a tedy jazyků. Děkuji moc.


RastyAmateur:
Jestli ty jsi z Gymnázia, tak smekám klobouk. Já jsem prvním ročníkem na střední a o psaní stránek se zajímám od osmé třídy. Bohužel na víc než základy (tagy, meta popisky, head, body, footer, něco z CSS) jsem se nezmohl. Nemám na to ani kvůli škole čas, ale baví mne to a snad jednou budu "profík" jak ty.
RastyAmateur
Profil
Super Grill:
Děkuji :D Já studuji druhák... Ovšem jak se můžeš dočíst dříve, především v [#4] a [#5], tak zase takový profík nejsem. Sice to sem nepatří, ale to je jedno :D Ke stránkám jsem se dostal ve čtvrté třídě, kde jsem viděl mého třídního vytvářet nový web stránek školy. Začal jsem také tvořit - estranky a především webnode. Také jsem v páté třídě vytvořil svou první HTML stránku. Vypadala asi tak, jako když dáš všechen kód z této stránky dohromady :D Pak byl pokoj. Vrátil jsem se k tomu v osmé až deváté, kdy je můj kamarád tvořil ve škole. Vzal jsem si ty jeho a upravoval CSS. Moje kariéra završila poznáním jednoho chlapa, který se tvorbou webových stránek tak trochu živí. Naučil mě, že v PHP nejsou jen podmínky a spoustu dalších věcí. Pomohl mi s prvními kroky s databází (to bylo před rokem). A od té doby pracuji sám - tedy spolu s touto diskuzí :D

Předemnou nemáš co smekat. Můžeš smekat leda před takovými borci, jako je Keeehi, anonymníí, Tomáš123, lionel messi a samozřejmě admini jako je Chammurappi, juriad, Strawberry a spoustu dalších. Ty, které jsem tu vyjmenoval jsou ovšem dle mého názoru tou největší špicí!

Ohledně toho kódu, lépe popiš, jak si to představuješ. Šlo by asi něco takového:

<?php
$_COOKIE["lang"] = isset($_COOKIE["lang"]) ? $_COOKIE["lang"] : null;
if(!empty($_COOKIE["lang"])){
  $languages = array("cz","en","de"); # Ochrana
  if(in_array($_COOKIE["lang"],$languages)){
    header("Location: /".$_COOKIE["lang"]."/homepage.php");
    }
  else{
    header("Location: nastaveni_jazyka.html"); # Nepovolený jazyk, musí se nastavit nový
    }
  }
else{
  header("Location: nastaveni_jazyka.html"); # Nenastavený jazyk
  }
?>

Do nastavení jazyka dáš formulář nebo tlačítka na adresy, které vedou na adresu "changelanguage.php". Bude to pomocí GET:

$languages = array("cz","en","de"); # Ochrana
if(in_array($_GET["lang"],$languages)){
 setcookie("lang",$_GET["lang"],(time()+(60*60*24*365)));
 header("Location: /".$_GET["lang"]."/homepage.php");
 }
else{
  header("Location: nastaveni_jazyka.html");
  }

Je velice možné, že tam mám někde chybu, nebo někdo má lepší způsob řešení. Jak již jsem psal - nejsem tam dobrý, přeceňuješ mě (ale lichotí mi to :-) ). Myslím, že někdo ti poradí lépe...
Super Grill
Profil *
RastyAmateur:
Děkujo moc za tvůj čas, hned si to jdu přečíst a otestovat. Zítra, pokud to stihnu přiložím i live demo, nebo prostě ukázku z toho, jakej mam pokrok. :D Jinak tebe i celou tuhle komunitu uznávám. Už dříve sem zde našel pomoc na me problémy s kódem. :) Přeji krásnou noc.
RastyAmateur
Profil
Super Grill:
Ještě bych jen podotkl: Pokud to budeš dělat přes tlačítka, být tebou dal bych je do hezky nastylovaných divů, a ten odkaz, kam by směřovali, by vypadal následovně: changelanguage.php?lang=en. Jen pro jistotu, kdybys nevěděl...

A znovu děkuji za ocenění :D Opravdu mi to udělalo oooobrovskou radost. Ale řikám, jsou tu jiní, lepší, kteří odpovídají téměř na všechny dotazy, a vždy bezchybně!
Super Grill
Profil *
RastyAmateur:
Snad kvůli mé hlouposti nezkazis nějakou pisemku zítra. :D Hodně štěstí.
RastyAmateur
Profil
Super Grill:
To není hloupost, ale touha po vědomostech :D Zítra píšu jen fyziku, a abych měl v pololetí ještě za 1 tak mi stačí za 3. To snad dám.. :-) Děkuji
Super Grill
Profil *
RastyAmateur:
Bohužel mi to hazí chybu 500. :/ soubory jsou zde a source v zipu zde
RastyAmateur
Profil
Super Grill:
Hodil jsem si to na wz a nešlo to. Prý mam chybu v syntax, ale několikrát jsem to kontroloval, a nemám!
Když jsem chybu hledal v googlu, všechna řešení jsou v .htaccess. Nenastavoval jsi tam něco?
Mrknu se na to ještě doma, ale nevím no...
Super Grill
Profil *
RastyAmateur:
Nene, vse co je v zipu, tak přesně tak je to v kořenový složce: a.jonesova.cz


RastyAmateur:
Jak ti jinak vyšla ta fyzika? My psali taky. Mám za 5. Typický. Hele, myslím, že je zbytečný takhle spammovat fórum, jestli máš steam, tak si mě přidej, to, na co jsme přišli pak můžem hodit sem na fórum, aby fo třeba pomohlo i jiným lidem. steamcommunity.com/id/jondycz

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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