Zum Inhalt springen

Sprachswitch soll nur Inaktive Sprache anzeigen

Erstellt am 3. August 2011 · 7 Antworten · letzte Antwort am 8. August 2011

Tags: Frage

TheJoker ·

Guten Tag allerseits.

Ich habe mal wieder ein kleines Problem.
Ich verwende Typo3 4.5.4
RealURL ist noch nicht installiert, soll aber bald kommen.

Die Sache ist die: Die Webseite soll in 2 Sprachen verfügbar sein:
Deutsch(Standard) und Französisch.
Das klappt auch alles wunderbar.(Manuelles Aufrufen per URL)

Nur möchte der Kunde, dass im Sprachauswahlmenü nur die Inaktive Sprache verfügbar ist.

Sprich:
Wenn ich auf der deutschen Seite bin soll Französisch stehen.
Wenn ich auf der Französischen bin soll Deutsch stehen.

Natürlich könnte ich das über ein PHP-Script lösen, allerdings habe ich mich bis jetzt noch nie wirklich mit der API von Typo3 bekannt gemacht und mich da reinzulesen würde mir zu lange dauern. Ich suche daher eine lösung über Typoscript, sofern das möglich ist.

lg
Joker

TheJoker ·

Sry wegen dem Doppelpost
Weiss niemand eine Lösung?

Ich habe in der Zwischenzeit schon diverse Sachen ausprobiert.

Ich habe folgenden Code, der Beide anzeigt:

subparts.lang = HMENU
      subparts.lang {
      special = language
### Reihenfolge und Auswahl der Sprachen im Menü
      special.value = 2,1
      special.normalWhenNoLanguage = 0
      1 = TMENU
      1 {
           noBlur = 1
           NO = 1
           NO {
                stdWrap.override = Français ||  | Deutsch
                doNotLinkIt = 1
                stdWrap.typolink.parameter.data = page:uid
                stdWrap.typolink.additionalParams = &L=2 || &L=1 
                stdWrap.typolink.addQueryString = 1
                stdWrap.typolink.addQueryString.exclude = L,id
                stdWrap.typolink.addQueryString.method = GET
                stdWrap.typolink.useCacheHash = 0
                stdWrap.typolink.no_cache = 0
             }
### Aktive Sprache
           ACT < .NO
           ACT.linkWrap = |

      }
   }

Ich habe schon probiert mit einer IF-Abfrage auf die Varibale L zu arbeite, hat leider nicht geklappt.

fiedomedia ·

Hallo Joker,

ich würde dir die Extension sr_language_menu empfehlen.
Die stell das Sprachmenü sehr gut dar, und da gibt es auch die Option "showCurrent". Wenn du diese auf 0 setzt, wird dir der Sprachselektor ohne die aktuelle Sprache angezeigt. Also genau das, was du wolltest.

Grüße Patrick

TheJoker ·

Ich habe mir die Extension runtergeladen und Konfiguriert.

Sie funktioniert auch fast so, wie ich das will. Jedoch klappt der wichtigste Teil, dass nur die Inaktive angezeigt wird, nicht.

Wenn ich auf der Deutschen Seite bin:
| Deutsch | Français

Und bei der Französischen:
| Deutsch | Français

Ich finde den Fehler einfach nicht.

plugin.tx_srlanguagemenu_pi1 {
 defaultLayout = 2 
 showCurrent = 0 
 defaultLanguageISOCode = ""
 languagesUidsList = 1,2
 }

Und innerhalb des PAGE-Object

subparts.lang < styles.content.getRight

Das Template

	<h4>Text</h4>
	<!-- ###TEMPLATE_2### begin -->

		<!-- ###LINK_LIST### begin
			  This is the part of the template substituted with the list of links: 
		-->
			<!-- ###LINK_ENTRY### begin 
				Template for a single link 
			-->
				###LINK###
			<!-- ###LINK_ENTRY### end-->
		<!-- ###LINK_LIST### end -->
	<!-- ###TEMPLATE_2### end -->

Und die ext_typoscript_setup.txt

plugin.tx_srlanguagemenu_pi1 {

	templateFile = {$plugin.tx_srlanguagemenu_pi1.file.templateFile}

	useSysLanguageTitle = {$plugin.tx_srlanguagemenu_pi1.useSysLanguageTitle}
	languagesUidsList = {$plugin.tx_srlanguagemenu_pi1.languagesUidsList}
	hideIfNoAltLanguages = {$plugin.tx_srlanguagemenu_pi1.hideIfNoAltLanguages}

	target = {$plugin.tx_srlanguagemenu_pi1.target}

	defaultLayout = {$plugin.tx_srlanguagemenu_pi1.defaultLayout}

	list.showInactive = {$plugin.tx_srlanguagemenu_pi1.showInactive}
	link.INACT.stdWrap.if.isTrue = {$plugin.tx_srlanguagemenu_pi1.showInactive}

Ich habe nun schon so ziemlich jede Zeile zu editieren Probiert, hat allerdings nie was gebracht.

lg Joker

fiedomedia ·

Hallo Joker,

TheJoker schrieb

Sie funktioniert auch fast so, wie ich das will. Jedoch klappt der wichtigste Teil, dass nur die Inaktive angezeigt wird, nicht.

Du hast alles ins Setup deines Templates geschrieben oder?

Du hast 2 Möglichkeiten:
Entweder in die Constants:

plugin.tx_srlanguagemenu_pi1.showCurrent = 0

Dann hast du im Setup:

plugin.tx_srlanguagemenu_pi1.link.CUR.stdWrap.if.isTrue = {$plugin.tx_srlanguagemenu_pi1.showCurrent}

(Du brauchst diese Zeile aber nicht, weil diese so Standard ist)

Oder gleich ins Setup:

plugin.tx_srlanguagemenu_pi1.link.CUR.stdWrap.if.isTrue = 0

Grüße Patrick

TheJoker ·

Hallo Patrick

Ich habe mir das Ganze nochmlas angeschaut.

Bei der Französischen Seite zeit es mir jetzt eigentlich Richtig an (abgesehen von "|")
| Deutsch

Bei der Deutschen Seite ist die Aktive allerdings immernoch da.
Deutsch | Français

Im Setup sieht es jetzt so aus

plugin.tx_srlanguagemenu_pi1 {
 defaultLayout = 2 
 defaultLanguageISOCode = ""
 languagesUidsList = 1,2
 link.CUR.stdWrap.if.isTrue = 0  
 } 
[...]
page.10 {
[...]
subparts.lang < styles.content.getRight
[...]
}

Und Bei den Constants:

plugin.tx_srlanguagemenu_pi1.useSysLanguageTitle = 1
plugin.tx_srlanguagemenu_pi1.useSelfLanguageTitle = 0
plugin.tx_srlanguagemenu_pi1.hideIfNoAltLanguages = 1
plugin.tx_srlanguagemenu_pi1.showCurrent = 0
plugin.tx_srlanguagemenu_pi1.doNotLinkInactive = 0
plugin.tx_srlanguagemenu_pi1.addSelectionListHeader = 0
plugin.tx_srlanguagemenu_pi1.defaultLayout = 2
plugin.tx_srlanguagemenu_pi1.defaultLanguageISOCode = De
plugin.tx_srlanguagemenu_pi1.defaultCountryISOCode = De

lg
Pascal

fiedomedia ·

Hallo,

ich hab jetzt zwar nicht ganz verstanden, wie es im Moment bei dir ausschaut, aber falls etwas nicht klappt, könntest du auch noch mit einer Condition arbeiten:

[globalVar = GP:L = 1]
plugin.tx_srlanguagemenu_pi1.languagesUidsList = 2
[global]

[globalVar = GP:L = 2]
plugin.tx_srlanguagemenu_pi1.languagesUidsList = 1
[global]

Was ist eig. deine Default-Sprache? (also die 0)

Grüße Patrick

TheJoker ·

Guten Morgen Patrick

Vielen dank für deine Hilfe.

Ich hab die Extension nochmals komplett Rausgeworfen.
Nach der Neuinstallation hat es komischerweise fast funktioniert.

Sprich: Es wird nur die Inatkive Sprache angeziegt. Allerdings steht anstelle von Deutsch noch German dort.
Dies habe ich gefixt, in dem ich per PhpMyAdmin in der Tabelle static_languages den Eintrag von Deutsch(ID 43) German zu Deutsch abgeändert habe.
Nun funktioniert alles so, wie es soll.

Sollte noch jemand probleme mit der Konfiguration haben, hier meine Komplette:
Konstanten:

#Namen aus der Tabelle SysLanguage verwenden
plugin.tx_srlanguagemenu_pi1.useSysLanguageTitle = 1
#Sprachnamen aus der Tabelle static_languages verwenden
plugin.tx_srlanguagemenu_pi1.useSelfLanguageTitle = 0
#Aktuelle Sprache anzeigen: 0 = Nein, 1 = ja
plugin.tx_srlanguagemenu_pi1.showCurrent = 0
#Inaktive sprache nicht verlinken
plugin.tx_srlanguagemenu_pi1.doNotLinkInactive = 0
# Bei der Liste einen Header hinzufügen
plugin.tx_srlanguagemenu_pi1.addSelectionListHeader = 0
# Iso-Code der Standardsprache
plugin.tx_srlanguagemenu_pi1.defaultLanguageISOCode = DE
# Layout auswählen: 0 = Flaggen, 1 = Dropdown, 2= Links
plugin.tx_srlanguagemenu_pi1.defaultLayout = 2

Setup:

### Die Sprache wird per GET-Variable "L" übergeben
config.linkVars = L
### Mehrsprachigkeit wird implementiert. Die Werte werden als globale Variable gespeichert
[globalVar = GP:L = 1]
  config {
### Die Sprache mit der ID 0 ist Deutsch
    plugin.tx_srlanguagemenu_pi1.languagesUidsList =0
### Sprache
    language =de
    locale_all = de_CH
 }
[global]
 
[globalVar = GP:L = 1]
  config {
### Sprachend ID 2 ist die ID, welche die Sprache Französisch hat.
    sys_language_uid =1
### Sprache wird auf Französisch festgelegt
    language =fr
    locale_all = fr_FR
 }
[global]

Setup: Innerhalb des Page-Object:

###  Dem lang-Subpart wird der Content aus der Spalte Rechts zugewiesen
subparts.lang < styles.content.getRight

Nochmals vielen Dank für deine Hilfe.

lg Pascal