Hallo zusammen,
ich muss mich mal wieder nach etwas langer Zeit zu Wort melden.
Bis vor kurzen habe ich immer alles mit der guten EXT:sr_language_menu das Sprachmenü umgesetzt. Leider hat der Entwickler eine Kleinigkeit (in meinen Augen) vergessen …
Was ist, wenn man mal eine Sprache nicht sehen will … und dann diese verstecken muss …???
Da ich keine Lösung dazu gefunden habe, hier ein Typoscript für ein Language-Menü womit im System selber bestimmen kann wie das ausgesteuert wird.
Auch hier gibt es die normalen NO, ACT / CUR oder INACT Variationen, nur richtig als Hard Drive Data Doctor Typo-Menü.
Das Tyopscript steuert das Menü
# Sprachmenü (konstanten) defaultLanguageID = 7 defaultLanguageIDs = 7,1 defaultLanguageNames = HE,EN
Das Typoscript generiert das UL-LI Menü mit der Weiche der Sprache.
Falls keine Übersetzung vorhanden ist, habe ich ein „javascript:void(0)“ eingesetzt, damit man nicht wechseln kann 🙂
# Sprachmenü (setup) lib.menu.language = COA lib.menu.language { # load language menu data 1 = LOAD_REGISTER 1 { queryParams = &{getIndpEnv : QUERY_STRING} queryParams { if.isTrue.data = getIndpEnv : QUERY_STRING insertData = 1 } } # Navigation Sprachwahl 10 = HMENU 10 { wrap = <ul id="languageNavigation" class="languageMenu">|</ul> special = language special.value = {$defaultLanguageIDs} special.normalWhenNoLanguage = 0 1 = TMENU 1 { noBlur = 1 NO = 1 NO { wrapItemAndSub = <li class="first">|</li> <li class="spacer">|</li> |*| <li>|</li> <li class="spacer">|</li> |*| <li class="last">|</li> doNotLinkIt = 1 doNotShowLink = 1 stdWrap2 { cObject = COA cObject { 1 = LOAD_REGISTER 1 { lParam.cObject = TEXT lParam.cObject { value = {$defaultLanguageIDs} listNum { stdWrap.data = register:count_HMENU_MENUOBJ stdWrap.wrap = |-1 splitChar = , } } lLabel.cObject = TEXT lLabel.cObject { value = {$defaultLanguageNames} listNum { stdWrap.data = register:count_HMENU_MENUOBJ stdWrap.wrap = |-1 splitChar = , } } } 10 = TEXT 10 { typolink { useCacheHash = 1 parameter.data = TSFE:id additionalParams.dataWrap = {register:queryParams}&L={register:lParam} title { current = 1 setCurrent = {register:lLabel} setCurrent.insertData = 1 } ATagParams = class="lang{register:lParam}" ATagParams.insertData = 1 } current = 1 setCurrent = {register:lLabel} setCurrent.insertData = 1 } 99 = RESTORE_REGISTER } } } # Aktive gewählte Sprache ACT < .NO ACT = 1 ACT.wrapItemAndSub = <li class="first cur">|</li> <li class="spacer">|</li> |*| <li class="cur">|</li> <li class="spacer">|</li> |*| <li class="last cur">|</li> # Keine Übersetzung vorhanden USERDEF1 < .NO USERDEF1 = 1 USERDEF1 { wrapItemAndSub = <li class="first na">|</li> <li class="spacer">|</li> |*| <li class="na">|</li> <li class="spacer">|</li> |*| <li class="last na">|</li> stdWrap2 { cObject { 10 > 10 = TEXT 10 { typolink { parameter = javascript:void(0) extTarget = 0 #{$defaultLanguageID} additionalParams.dataWrap = &L={register:lParam} title { current = 1 setCurrent = {register:lLabel} setCurrent.insertData = 1 } ATagParams = class="lang{register:lParam}" ATagParams.insertData = 1 } current = 1 setCurrent = {register:lLabel} setCurrent.insertData = 1 } 99 = RESTORE_REGISTER } } } } } 4 = RESTORE_REGISTER }
Der einfache CSS-Style
#languageNavigation {list-style:none;margin:0;padding:0;} #languageNavigation li {display:block;float:left;margin-right:5px;} #languageNavigation li a {text-decoration:none} #languageNavigation li.spacer {font-weight:700} #languageNavigation li.cur a {color:#fff;} #languageNavigation li.na a {color:#999}
Viel Spaß damit 🙂