locate ====== Funktion -------- - „Weise sinnvolle Sprachversion beim ersten Zugriff zu!“ - „Erlaube manuelle Umschaltung und merke Dir diese!“ Erster Zugriff ~~~~~~~~~~~~~~ Ziel: „Richtige Version“ der Website zuweisen Version: „L=“ Entscheidungskriterien \* Browsersprache \* IP \* HTML5 Geo Location (nicht implementiert) \* andere Feinheit: Zugriff auf definierte Versions-Seite („/de/produkte“) \* beibehalten? -> Extension nur auf einbinden \* übersteuern? -> Extension überall einbinden Sprachwechsel… wohin? \* auf die angeforderte Seite \* auf eine definierte Ausgangsseite Konzept ------- „Judges trigger actions based on facts“ Actions \* cookieHandling = Use Cookie to persist language \* overrideCookie = Allow explicit change of Cookie value (&setLang=1) \* page \| url = Target Page ID or URL (if none given, redirect to self) \* sys_language = Target Language ID Facts \* BrowserAcceptedLanguage (Lang, Locale) \* Environment (UserAgent, …) \* IP2Country (Country Code based on Source IP of Request, …) \* Constants (any TS constants) Judges \* AndCondition = Proceed to action if all facts are matched \* Fixed = Proceed anyway TypoScript ---------- Installation (via UserFunc) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: plugin.tx_locate_pi1 = USER_INT plugin.tx_locate_pi1 { userFunc = Bitmotion\Locate\Locate->main # for further configuration see details below } page.7 < plugin.tx_locate_pi1 - Include userfunc at the beginning of the page Actions ~~~~~~~ :: actions { redirectToPageDE { 20 = \Bitmotion\Locate\Action\Redirect 20.sys_language = 1 20.cookieHandling = 1 } redirectToPageEN { 20 = \Bitmotion\Locate\Action\Redirect 20.page = 42 20.sys_language = 0 20.cookieHandling = 1 } default { 20 = \Bitmotion\Locate\Action\Redirect 20.page = 43 20.sys_language = 0 20.cookieHandling = 1 } } - cookieHandling = 0 -> bedeutet Prüfung bei jedem Zugriff! (ok, falls nicht auf jeder Seite eingebunden) Facts ~~~~~ :: facts { # de, DE, de_DE; en, GB, en_GB env = \Bitmotion\Locate\FactProvider\Environment # DE, UK, ... countryByIP = \Bitmotion\Locate\FactProvider\IP2Country browserAccepted = \Bitmotion\Locate\FactProvider\BrowserAcceptedLanguage constants = \Bitmotion\Locate\FactProvider\Constants } Facts = Klassen und symbolische Namen Ausprägungen zu deren Verwendung in Judges: \* countryByIP.countrycode = DE \* countryByIP.IP2Dezimal = 1.2.3.4 \* constants. = DACH \* browserAccepted.lang = fr browserAccepted.locale = de_DE \* env. = z.B. env.HTTP_HOST = https://mysite.fr Judges ~~~~~~ :: judges { 20 = \Bitmotion\Locate\Judge\AndCondition 20.action = redirect_fr 20.matches ( countryByIP.countryCode = CH browserAccepted.lang = fr ) 999 = \Bitmotion\Locate\Judge\Fixed 999.action = default } Sonstiges ~~~~~~~~~ :: plugin.tx_locate_pi1.debug - Set to 1 toshow additional information (on the screen), i.e. what was the data of incoming request :: plugin.tx_locate_pi1.dryRun - Set to 1 if you want debug only Cookies ------- :: Key: bm_locate Value: Language ID - Wird beim ersten Zugriff gesetzt, falls im TS erlaubt - Wird auch gesetzt, wenn &setLang=1 übergeben wird -> Dies ins Sprachmenü aufnehmen! - Ist Cookie gesetzt, werden die Judges nicht ausgeführt