Page 1 of 1

Alleen voor eerste keer bezoekers, auto browserLang redirect

Posted: Wed Mar 27, 2013 10:49 pm
by MADLAX
Hoi, ik ben nieuw hier op de forum, maar niet met cmsms.

Dacht laat het maar eens hier te vragen .
Ik maak een multilang site, en zat te kijken naar een goede "first visit language redirect"
Dus alleen de eerste keer dat een bezoeker op de site komt en de optie houd op een anderen te kiezen.

Nu heb ik meerderen methode gevonden, maar die zetten je site vast in de taal van je browser waar je het neer zet.
Zelf ben ik al een paar uur bezig geweest maar ben nog al roestig met cmsms.

Hier onder heb je de code die ik heb gevonden.

Code: Select all

{browser_lang accepted='nl,en' default='en' assign='browser_lang'}
{redirect_page page=$browser_lang}
Deze is wat ouder.

Code: Select all

$gCms = cmsms();
// Read browser language
$foo = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

// Only need the first two characters
$lang = substr($foo,0,2);

// Passing the parameter $lang to the template
$smarty = &$gCms->GetSmarty();
$smarty->assign('lang', $lang);
---------
{get_browserlanguage}

{if $lang == 'nl'}
      {redirect_page page="nl"}
{/if}
Ik heb al naar een paar dingen gekeken, maar kan geen goed oplossing vind met in mijn kennis level.
Heb naar CGSimpleSmarty {session_put} te kijken maar kreeg dat niet aan de praat.
Naar setcookie gekeken, maar dat werkte niet lekker.
Hoop dat iemand hier een mooie oplossing heeft, anders moet ik de functie even laten vallen.

Re: Alleen voor eerste keer bezoekers, auto browserLang redi

Posted: Thu Mar 28, 2013 8:24 am
by velden
Volgens mij is dit typisch iets om met een cookie op te lossen.

Kijk eens naar dit verhaaltje:

https://www.cmscanbesimple.org/blog/set ... ug-cookies

In jouw geval vraag je één keer de browserlang op en redirect naar die taal plus je zet een cookie. Als je ziet dat het cookie al is gezet doe je dat niet meer.

Re: Alleen voor eerste keer bezoekers, auto browserLang redi

Posted: Thu Mar 28, 2013 4:39 pm
by MADLAX
Bedankt, had zo iets al gecode in de get_browserlang UDT.
En dat werkte niet goed. Het probleem is dat de cookie in de template moet worden gezet.
Anders als iemand wel op hun browser taal de eerst kom en je gaat naar een anderen taal krijg je de eerst keer redirect terug. (a rebound)
Als je alles in de default root zet.

Het probleem is dat als je deze code hier onder in de template zet is dat die voor meerderen cookie pads een cookie aanmaakt.

Code: Select all

{if !isset($smarty.cookies.first)}{set_cookies days='60' first='load'}{/if}
En als deze code in de default root zet of "g content block" maar de eerst keer vind die cookie niet. Zo redirect voor de eerst keer werkt niet.

Code: Select all

{if isset($smarty.cookies.first)}{browser_lang accepted='nl,en' default='en' assign='browser_lang'}{redirect_page page=$browser_lang}{/if}
Zo als iemand hier een code voorbeeld wat wel goed werk.
Dat stel ik erg op prijs. ;)

Re: Alleen voor eerste keer bezoekers, auto browserLang redi

Posted: Fri Mar 29, 2013 5:40 pm
by Rolf
This will work with versions of CMSMS that process the body before the head of the document. (Cookies must be sent before the <__html>. So if you have it set up that CMSMS processes the head before the body, where your {setCookies} tag is, then it will not work.)