Typoscript languageMenu alternative zu sr_language_menu

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">&#124;</li> |*| <li>|</li><li class="spacer">&#124;</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">&#124;</li> |*| <li class="cur">|</li><li class="spacer">&#124;</li> |*| <li class="last cur">|</li>
 
      # Keine Übersetzung vorhanden
      USERDEF1 < .NO
      USERDEF1 = 1
      USERDEF1 {
        wrapItemAndSub = <li class="first na">|</li><li class="spacer">&#124;</li> |*| <li class="na">|</li><li class="spacer">&#124;</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 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.