Control slouží pro přesměrování na jinou stránku v případě, kdy se neshoduje jazyk předané proměnné a aktuální jazyk. Control tedy slouží k řešení problému, kdy dojde k přepnutí jazyka na stránce s prvkem, který je součástí jazykově závislé kolekce (a tudíž nemá ekvivalent v jiném jazyce).
<je:langRedirect runat="server" href="/cs/articles.aspx" />
Atributy
container nepovinný [ID contejneru]
Umožňuje změnit kontejner pro porovnávání jazyků. Ve výchozím chování se jazyk proměnné porovnává s prvním nadřazeným kontejnerem. Uvedením id jiného kontejneru do tohoto atributu lze jazyky porovnávat v kontextu jiného kontejneru.
href povinný [string]
URL, na které bude návštěvník přesměrován v případě, že jazyk proměnné se liší od aktuálního jazyka. URL se doporučuje zadávat absolutně z rootu webu.
preserveLangDir nepovinný [true, false]
Nastavením na true lze potlačit u absolutních odkazů úpravu cesty změnou jazykového adresáře. Více podrobností včetně příkladů je uvedeno v kapitole Adresářová struktura webu.
preservePath nepovinný [true, false]
Nastavením na true lze potlačit u absolutních odkazů úpravu cesty doplněním virtuálního adresáře. Více podrobností včetně příkladů je uvedeno v kapitole Adresářová struktura webu.
Příklad
Předpokládejme, že máme web se dvěma jazykovými mutacemi: česky a anglicky. V Site.config máme jazykově závislou kolekci článků:
<Collection name="article" langDepend="items" />
Protože je jazykově závislá sama kolekce, znamená to, že k libovolnému článku v češtině neexistuje z pohledu JellyPot ekvivalentní článek v angličtině. A naopak. Je-li uživatel např. na české mutaci webu, control <je:langSelector>
na stránce článku vytvoří odkaz na anglickou mutaci, který obsahuje proměnnou stávajícího, českého, článku. Když se pak uživatel přepne na angličtinu, zobrazí se mu sice anglická mutace webu, samotný článek ale zůstane v češtině (jelikož neexistuje anglický ekvivalent). Tento problém můžeme vyřešit právě použitím controlu <je:langRedirect>
.
<je:container runat="server" default="article[0]"> <je:langRedirect runat="server" href="/cs/all-articles.aspx" /> <je:item runat="server" field=".title" tag="h1" /> <je:item runat="server" field=".text" /> </je:container>
Tímto zařídíme, že uživatel bude přesměrován na stránku s přehledem všech – anglických – článků. V příkladu je uveden jazykový adresář v absolutní cestě (cs), což je v pořádku. JellyPot v adresách automaticky jazykové adresáře přepisuje podle aktuálního jazyka. To znamená, že v anglické mutaci bude uživatel přesměrován na stránku /en/all-articles.aspx
(toto chování lze potlačit atributem preserveLangDir
).