Zum Inhalt springen

Marker im Typoscript werden nicht ersetzt?

Erstellt am 18. November 2013 · 13 Antworten · letzte Antwort am 20. November 2013

Tags: Templates & Layouts, TYPO3 4.x, Frage

flanger ·

Hi!
Ich stehe hier mächtig auf dem Schlauch und könnte etwas Hilfe gut gebrauchen. Wahrscheinlich bin ich einfach zu doof...
Es geht darum, dass ich einen Sprachumschalter auf meiner Seite per Marker einbinde. Je nach Sprache ist eine andere Fahne oben zu sehen und der Umschalter entsprechend vertauscht...
Von daher gibt es in meinem HTML Template den Aufruf zum Marker:

###LANGUAGESWITCHER###

Im Typoscript möchte ich nun diesen Marker dynamisch verändern. Es soll jeweils zur aktuellen Seite + Language Flag weitergeleitet werden. Dazu habe ich folgendes Typoscript entworfen:

marks {
SEITENURL = TEXT
SEITENURL.typolink {
parameter.data = TSFE:id
  returnLast=url 
}
LANGUAGESWITCHER = TEXT
LANGUAGESWITCHER.value = <form name="form"><select style="width:60px" name="link" onChange="javascript:window.location.href = document.form.link.options[document.form.link.selectedIndex].value;"><option value="'###SEITENURL###'?L=0" data-image="fileadmin/templates/img/german.gif"><span style="float:right"></span> </option><option value="'###SEITENURL###'?L=1" data-image="fileadmin/templates/img/gb.gif"><img src=""> </option></select></form>
  LANGUAGESWITCHER.lang.en = <form name="form"><select style="width:60px" name="link" onChange="javascript:window.location.href = document.form.link.options[document.form.link.selectedIndex].value;"><option value="###SEITENURL###?L=1" data-image="fileadmin/templates/img/gb.gif"><img src=""> </option><option value="###SEITENURL###?L=0" data-image="fileadmin/templates/img/german.gif"><span style="float:right"></span> </option></select></form>
}

Das Problem ist nun, dass die Marker im Typoscript nicht ersetzt werden. Ist das ein Grundlegendes Problem oder kann man das irgendwie lösen? Wäre super wenn mir jemand auf die Sprünge helfen könnte! Danke!!!

Chrissli ·

Jo. Setzt doch mal statt,

LANGUAGESWITCHER.value = ....text
LANGUAGESWITCHER.value ( 
  ... text 
)

Oder bau den Quelltext gleich mit TS auf

flanger ·

Hi chrissli!
Danke schonmal für die Hilfe! Leider funktioniert das nicht so ohne weiteres. Wenn ich das = durch eine Klammer ersetze wird der Marker auch nicht übersetzt.
Es liegt doch daran, dass "value =" eine Constante erzeugt, die wiederum keine Marker interpretieren kann oder?

Tevsa ·

Moin,

werden denn andere Marker ersetzt? SO etwas passiert bei mir nur wenn ich

workOnSubpart = DOKUMENT

Oder ähnlich vergessen habe

Gruß
Tevsa

flanger ·

Hi Tevsa!
Also die Marker werden grundsätzlich ersetzt. Auch der Marker "SEITENURL" funktioniert. Nur eben nicht in meiner Konstante die ich für die Sprachumschaltung verwende.

Tevsa ·

ok, jetzt habe ich die Problematik kapiert. Aber ich sehe auch keine Konstatenvariablen im deinem Quellcode.

Wenn es mehrzeilig wird muss chrislli schon erwähnt verden da = hinter value duch "(" ersetzt werden. ganz wichtig ist das nach der klammer nix mehr kommt. Der Wert MUSS in die nächste Zeile.

Und bei KOnstanten ist nach meinem Wissen die Notation "{WERT}" gesetzt werden , wobei WERT der Name aus den Konstants die in gescheiften Klammern stehen.
HIer mal ein Link dazu.
http://www.jochenfroehlich.com/typo3-best-practice/typoscript-konstanten.html

Gruß
Tevsa

flanger ·

Der Wert MUSS in die nächste Zeile.

Das ist ja ein interessanter Hinweis! Nun wird der Quellcode immerhin nicht mehr zerschossen dargestellt. Also wenn ich

value (
hier mein Code
)

schreibe.
Allerdings wird mein Marker immer noch nicht ersetzt.
Die Konstante ist ja das was hinter value kommt oder? Darin müsste halt mein Marker ausgelesen werden und das passiert leider nicht. Oder kann ich die aktuelle URL der Seite irgendwie in eine Konstante übergeben? Soweit ich das jetzt sehe ist das nicht ohne weiteres möglich?

Tevsa ·

Das ist ein gute Frage.... Ist das einen Extension, die diesen Wert benutzen soll?
Ich kapiere nicht ganz was du damit vorhast...
Versuch mal soetwas:

LANGUAGESWITCHER = COA
LANGUAGESWITCHER.10 = TEXT
LANGUAGESWITCHER.10.value(
	<form name="form"><select style="width:60px" name="link" onChange="javascript:window.location.href = document.form.link.options[document.form.link.selectedIndex].value;"><option value="
)
LANGUAGESWITCHER.20 = TEXT
LANGUAGESWITCHER.20.typolink {
parameter.data = TSFE:id
returnLast=url
}
LANGUAGESWITCHER.30 = TEXT
LANGUAGESWITCHER.30.value(
	?L=0" data-image="fileadmin/templates/img/german.gif"><span style="float:right"></span> </option><option value="
)

LANGUAGESWITCHER.40 = TEXT
LANGUAGESWITCHER.40.typolink {
parameter.data = TSFE:id
returnLast=url
}
....

Die Idee dahinter: Du brauchst einen HTML-String. die einzige Variable ist "SEITENURL" Die kannst du mein eine COA - Object zusammensetzen. Ich habe leider grade wenig Zeit den Code vollständig zu setzen, aber ich glaube mit dem Beispiel Oben kann man erkenne was ich meine.
Konstanten brauchst du da nicht.
Die Seiten URL kannst duch als temp.Object mehrfachnutzen. ABer das ist dann Optimierung und nicht mehr erstellung.

Mein Prof sagte damals immer 1.) Make it run 2) make ist beautiful...

Ich hoffe es hoilft

Gruß
Tevsa

flanger ·

Hi Tevsa!
Also erstmal 1000 Dank! Das ist auf jeden Fall ein Schritt in die richtige Richtung! Ich beschreibe nochmal genau was ich vorhabe:

Es gibt einen Sprachumschalter in Form eines Dropdownmenüs mit Flaggen. Wenn ich auf der deutschen Seite bin gibt es oben ein Fähnchen für Deutsch. Wenn ich das Dropdownmenü öffne sehe ich meine alternativsprachen zB Englisch. Klicke ich auf Englisch komme ich zur englischen Version der aktuellen Seite UND oben im Dropdown steht ab sofort die Englische Fahne oben. Wenn ich das Dropdown nun öffne sehe ich als erste Auswahl die Deutsche Fahne. Das klappte soweit super mit simplen Konstanten. Da ich aber nun zur aktuellen Seite verlinken möchte muss ich ja die URL Variabel halten. Da liegt der Hase im Pfeffer 🙂.

Dein Code funktioniert soweit gut! Nun muss ich nur noch eine Englische Version dieses Codes anlegen, die dann ausgewählt wird, wenn man auf der englischen Seite ist. Es soll so sein, dass wenn man auf der englischen Seite ist, das Dropdown Menü genau anders herum dargestellt wird. Also zuerst die Englische Fahne und dann eben die Deutsche.

Mit

LANGUAGESWITCHER.150 = TEXT
LANGUAGESWITCHER.150.value(
?L=1" data-image="fileadmin/templates/img/gb.gif"><img src=""> </option></select></form>
  )
LANGUAGESWITCHER.150.lang.en(
?L=0" data-image="fileadmin/templates/img/german.gif"><img src=""> </option></select></form>
  )

klappt das noch nicht...

Tevsa ·

Das freunt mich :-)

Grde wenig Zeit. Stickwort sind conditons

also sowas:

[globalVar = GP:L = 0]
... hier das TS für die default Sprache
[global]

[globalVar = GP:L = 1]
... hier das TS für die 2. Sprache
[global]

Gruß
tevsa

flanger ·

Danke, dass Du mir trotzdem hilfst!

Stickwort sind conditons

Das versuche ich hier schon, aber leider klappt es nicht. Es wird immer nur die erste Version angezeigt auch wenn die L Variable richtig übergeben wird... Anbei mal mein kompletter Code:

#LanguageSwitcher Tevsa
[globalVar = GP:L=0]
LANGUAGESWITCHER = COA
LANGUAGESWITCHER.110 = TEXT
LANGUAGESWITCHER.110.value(
<form name="form"><select style="width:60px" name="link" onChange="javascript:window.location.href = document.form.link.options[document.form.link.selectedIndex].value;"><option value="
)
LANGUAGESWITCHER.120 = TEXT
LANGUAGESWITCHER.120.typolink {
parameter.data = TSFE:id
returnLast=url
}
LANGUAGESWITCHER.130 = TEXT
LANGUAGESWITCHER.130.value(
?L=0" data-image="fileadmin/templates/img/german.gif"><span style="float:right"></span> </option><option value="
)
LANGUAGESWITCHER.140 = TEXT
LANGUAGESWITCHER.140.typolink {
parameter.data = TSFE:id
returnLast=url
}
LANGUAGESWITCHER.150 = TEXT
LANGUAGESWITCHER.150.value(
?L=1" data-image="fileadmin/templates/img/gb.gif"><img src=""> </option></select></form>
  )  
[global]
[globalVar = GP:L=1]
LANGUAGESWITCHER = COA
LANGUAGESWITCHER.110 = TEXT
LANGUAGESWITCHER.110.value(
<form name="form"><select style="width:60px" name="link" onChange="javascript:window.location.href = document.form.link.options[document.form.link.selectedIndex].value;"><option value="
)
LANGUAGESWITCHER.120 = TEXT
LANGUAGESWITCHER.120.typolink {
parameter.data = TSFE:id
returnLast=url
}
LANGUAGESWITCHER.130 = TEXT
LANGUAGESWITCHER.130.value(
?L=1" data-image="fileadmin/templates/img/gb.gif"><span style="float:right"></span> </option><option value="
)
LANGUAGESWITCHER.140 = TEXT
LANGUAGESWITCHER.140.typolink {
parameter.data = TSFE:id
returnLast=url
}
LANGUAGESWITCHER.150 = TEXT
LANGUAGESWITCHER.150.value(
?L=0" data-image="fileadmin/templates/img/german.gif"><img src=""> </option></select></form>
  )  
[global]
flanger ·

na gut 🙂. Ich habs gelöst bekommen! Die Condition hat nicht gegriffen, weil sie sich innerhalb einer {} für die Marker und für das Page Object befand.
Es war zwar eine schwere Geburt, aber es läuft! Ich danke Tevsa für die GROßARTIGE Hilfe!!!

flanger ·

jetzt muss ich doch nochmal nachhaken. Auf meinem Localhost funktioniert das alles ganz wunderbar! Auf meiner Liveumgebung leider nicht. Ich habe dort RealURL aktiviert und die beiden Sprachen werden jeweils in Verzeichnissen abgebildet.
Also
meinedomain.de/de/home.html
und
meinedomain.de/en/home.html

Mit dem obigen Code wird ja ein ?L=1 an die URL angehängt. Das hat keine Auswirkung auf die Seitensprache wenn real_url aktiviert ist. Ich habe auch den Code schon umgeschrieben, so dass anstatt dem ?L=1 ein /en/ vorne angestellt wird. Dann lauten die URLs aber so
meinedomain.de/en/de/home.html was natürlich auch nicht funktioniert....Das Sprachverzeichnis ist dann doppelt... ARGS!
Kann mir nochmal jemand auf die Sprünge helfen wie man das Problem lösen könnte?

flanger ·

Ich habe es endlich gelöst. Der Trick war anstatt den Parameter ?L=1 bzw ?L=0 direkt zu übergeben, dass dafür vorgesehene Typoscript einzusetzen.

  additionalParams = &L=0