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 8.7
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 8.7, wobei alle Versionen zwischen 4.5 und 6.2 ausgelassen wurden.
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 = <nav><ul class="ricNavLang">|</ul></nav>
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
}
}