Skip to main content, zum Hauptinhalt springen
 
 
 
 
 

Sprachmenü für TYPO3 aus purem TypoScript

Funktionsreiche Sprachnavigation mit TypoScript, inklusive Code: Statt fehleranfällige Dritthersteller Erweiterungen zu verwenden, kann man häufig mit ein wenig TypoScript gleiches oder besseres erreichen. Hier als Beispiel ein Sprachmenü mit Flaggen, getestet von TYPO3 4.2 bis TYPO3 7.6

Immer wieder stolpert man über TYPO3 Installationen mit Myriaden von Extensions, die zum Großteil für einen erfahrenen TYPO3-Integrator gar nicht notwendig sind, oder manchmal sogar eher umständlicher als 'nativer' TypoScript Code.

Aufgrund einiger Anfragen habe ich mich nun entschlossen, meine ganz persönliche Sprachmenü-Lösung mit leichten Modifikationen zu veröffentlichen. Verbesserungsvorschläge werden gerne akzeptiert, Kontaktdaten siehe Fußzeile.

Die vorliegende Lösung ist ausgelegt auf bis zu 14  + 1 Sprachen, wobei Deutsch als Standardsprache angenommen wird.

Sie können die Navigation aber natürlich jederzeit um weitere Sprachen ergänzen.

Natürlich benötigen Sie auch noch die entsprechenden Flaggen. Diese können Sie zusammen mit diesem Menü am besten in Ihr Sitepackage integrieren.

Getestet wurde die Lösung bisher mit den TYPO3 Versionen 4.2 bis 7.6, wobei alle Versionen zwischen 4.5 und 6.2 ausgelassen wurden. Ein ausgiebiger Test mit TYPO3 Version 8.X LTS wird folgen sobald die neue TYPO3 Version verfügbar ist (voraussichtlich März/April 2017).

 

 

Quelltext für TypoScript Sprachmenü

lib.objNavLangRicc = HMENU
lib.objNavLangRicc {
  special = language
  # you could add the language-ids in a constant and then only
  # activate the languages which are available in a certain installation
  special.value = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
  special.normalWhenNoLanguage = 0
  wrap = <ul class="ricNavLang">|</ul>
  1 = TMENU
  1 {
    noBlur = 1
    # Default languages
    NO = 1
    NO {
      linkWrap = <li>|</li>
      # get image links and alt-texts
      stdWrap.override.dataWrap (
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/de.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:1:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:2:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:3:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:4:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:5:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:6:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:7:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:8:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:9:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:10:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:11:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:12:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:13:flag}.gif ||
        PATH:EXT:sitepackage_example/Resources/Public/Images/Flags/gif/{DB:sys_language:14:flag}.gif
      )
      stdWrap.override.insertData = 1
      stdWrap.override.wrap3 (
        <img src="{|}" alt="Deutsch" /> ||
        <img src="{|}" alt="{DB:sys_language:1:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:2:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:3:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:4:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:5:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:6:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:7:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:8:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:9:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:10:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:11:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:12:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:13:title}" /> ||
        <img src="{|}" alt="{DB:sys_language:14:title}" />
      )
      # get title for a-tag
      stdWrap.typolink.title.cObject = TEXT
      stdWrap.typolink.title.cObject.dataWrap (
        Deutsch || {DB:sys_language:1:title} || {DB:sys_language:2:title} || {DB:sys_language:3:title} ||
        {DB:sys_language:4:title} || {DB:sys_language:5:title} || {DB:sys_language:6:title} || {DB:sys_language:7:title} ||
        {DB:sys_language:8:title} || {DB:sys_language:9:title} || {DB:sys_language:10:title} || {DB:sys_language:11:title}  ||
        {DB:sys_language:12:title} || {DB:sys_language:13:title} || {DB:sys_language:14:title}
      )

      # don't link, otherwise no GET params added
      doNotLinkIt = 1
      # now parse link from GET params again
      stdWrap.typolink.parameter.data = page:uid
      stdWrap.typolink.additionalParams =  &L=0 || &L=1 || &L=2 || &L=3 || &L=4 || &L=5 || &L=6 || &L=7 || &L=8 || &L=9 || &L=10 || &L=11 || &L=12 || &L=13 || &L=14
      stdWrap.typolink.addQueryString = 1
      stdWrap.typolink.addQueryString.exclude = L,id,cHash,no_cache
      stdWrap.typolink.addQueryString.method = GET
      stdWrap.typolink.useCacheHash = 1
      stdWrap.typolink.no_cache = 0
      stdWrap.typolink.ATagParams (
        class="navLangNo" hreflang="de" ||
        class="navLangNo navHide{DB:sys_language:1:hidden}" hreflang="{DB:sys_language:1:flag}" ||
        class="navLangNo navHide{DB:sys_language:2:hidden}" hreflang="{DB:sys_language:2:flag}" ||
        class="navLangNo navHide{DB:sys_language:3:hidden}" hreflang="{DB:sys_language:3:flag}" ||
        class="navLangNo navHide{DB:sys_language:4:hidden}" hreflang="{DB:sys_language:4:flag}" ||
        class="navLangNo navHide{DB:sys_language:5:hidden}" hreflang="{DB:sys_language:5:flag}" ||
        class="navLangNo navHide{DB:sys_language:6:hidden}" hreflang="{DB:sys_language:6:flag}" ||
        class="navLangNo navHide{DB:sys_language:7:hidden}" hreflang="{DB:sys_language:7:flag}" ||
        class="navLangNo navHide{DB:sys_language:8:hidden}" hreflang="{DB:sys_language:8:flag}" ||
        class="navLangNo navHide{DB:sys_language:9:hidden}" hreflang="{DB:sys_language:9:flag}" ||
        class="navLangNo navHide{DB:sys_language:10:hidden}" hreflang="{DB:sys_language:10:flag}" ||
        class="navLangNo navHide{DB:sys_language:11:hidden}" hreflang="{DB:sys_language:11:flag}" ||
        class="navLangNo navHide{DB:sys_language:12:hidden}" hreflang="{DB:sys_language:12:flag}" ||
        class="navLangNo navHide{DB:sys_language:13:hidden}" hreflang="{DB:sys_language:13:flag}" ||
        class="navLangNo navHide{DB:sys_language:14:hidden}" hreflang="{DB:sys_language:14:flag}"
      )
      stdWrap.typolink.ATagParams.insertData=1
    }
    # Active language
    ACT < .NO
    ACT {
      stdWrap.typolink.ATagParams = class="navLangAct"
    }
    # NO and no translation available
    USERDEF1 < .NO
    USERDEF1 {
      linkWrap = <li style="display:none;">|</li>
      doNotLinkIt = 1
      stdWrap.typolink >
      ATagParams >
    }
    # ACT +  and no translation available
    USERDEF2 < .USERDEF1
  }
}
'Natives' Sprachmenü auf Basis von TypoScript
 
 

Sehr geehrter Besucher! Leider verwenden Sie einen veralteten Browser. Sie können einen sehr guten, sicheren, stabilen und zeitgemässen Browser kostenlos unter dem folgenden Link herunterladen: Firefox Browser auf www.mozilla.org Dieser Browser ist erhältlich für: Windows, MacOS (Apple), iPhone, Android und Linux.