Search the FirstSpirit Knowledge Base
Moin,
Folgendes Szenario:
Mastersprache ist Englisch. Desweiteren gibt es Deutsch.
Sprachfallback innerhalb von FS fukntioniert ja so, dass, wenn die Inhaltsseite nicht
auf deutsch übersetzt ist, die englische Version herangezogen wird.
Nun haben wir bei uns den besonderen Fall, dass es auchSeiten geben kann,
die nicht in englischer Sprache jedoch in deutscher Sprache vorliegen.
Dafür habe ich versucht, einen Workaround zu bauen.
Am Anfang eines Seitentemplates habe ich folgenden Code-Schnipsel eingebaut:
$CMS_IF(#global.language == #global.project.masterLanguage && !#global.page.isTranslated)$
$CMS_SET(useFallback, true)$
$CMS_SET(fallbackLanguage, null)$
$CMS_FOR(lang, #global.project.languages)$
$CMS_IF(fallbackLanguage.isEmpty && lang != #global.project.masterLanguage && #global.page.isTranslated(lang.abbreviation))$
$CMS_SET(fallbackLanguage, lang)$
$CMS_END_IF$
$CMS_END_FOR$
$CMS_IF(!fallbackLanguage.isEmpty)$
$CMS_SET(#global.language, fallbackLanguage)$
$CMS_END_IF$
$CMS_END_IF$
Im weiteren Verlauf des Seitentemplates kommt u.a. soetwas vor:
$CMS_VALUE(pt_title)$
$CMS_RENDER(template:"WEBeditInplaceBody", name:"content")$
Und am Ende wird die Sprache wieder zurück gestellt:
$CMS_IF(useFallback)$
$CMS_SET(#global.language, #global.project.masterLanguage)$
$CMS_END_IF$
Dieses Vorgehen funktioniert aber nur zum Teil.
Die Variable 'pt_title', die im Formular des Seitentemplates definiert ist, wird weiterhin auf englisch ausgegeben.
Der 'content' hingegen auf deutsch.
Wie bringe ich FirstSpirit dazu, auch die Formularwerte des Seitentemplates in der anderen Sprache auszugeben?
Viele Grüße
Peter Schulz
Eine Möglichkeit habe ich bereits gefunden:
$CMS_VALUE(#global.page.getFormData().get(#global.language, "pt_title").get)$
Allerdings muss man das jetzt um jeden Formularwert herum bauen.
Gibt es noch eine einfachere Lösung?
Eventuell folgendes versuchen:
"$CMS_IF" im Seitenttemplate, wo im then-Fall die folgenden drei Dinge gemacht werden
Der eigentliche Template-Inhalt kommt denn (unverändert) in den else-Fall. Achtung: Die Anweisung in 2 ist eine Rekursion. Die Bedingung muss also so sein, das es zu keiner Endlos-Rekursion kommt.
Disclaimer: Ich habe es nicht ausprobiert, laut API müsste das aber funktionieren
Eventuell erweitert man das if noch so, das der rekursive Aufruf bei der Vorschau nicht gemacht wird.
Hallo,
ich habe jetzt folgendes ausprobiert:
1. Feststellen, ob ein Fallback durchgeführt werden muss / kann:
$CMS_IF(#global.language == #global.project.masterLanguage && !#global.page.isTranslated)$
$CMS_SET(useFallback, true)$
$CMS_SET(fallbackLanguage, null)$
$CMS_FOR(lang, #global.project.languages)$
$CMS_IF(fallbackLanguage.isEmpty && lang != #global.project.masterLanguage && #global.page.isTranslated(lang.abbreviation))$
$CMS_SET(fallbackLanguage, lang)$
$CMS_END_IF$
$CMS_END_FOR$
$CMS_IF(fallbackLanguage.isEmpty)$
$CMS_SET(useFallback, false)$
$CMS_END_IF$
$CMS_END_IF$
2. Fallback:
$CMS_IF(useFallback)$
<!-- fallback... -->
$CMS_SET(#global.language, fallbackLanguage)$
$CMS_VALUE(#global.node.createContent(#global, #global.pageParams))$
$CMS_SET(#global.language, #global.project.masterLanguage)$
$CMS_ELSE$
...
$CMS_END_IF$
Jetzt wird genau 12 mal der Kommentar "<!-- fallback... -->" ausgegeben.
Nur das html-Grundgerüst ist noch zusätzlich im Quelltext zu sehen.
Da wir in unseren Seitentemplates nicht all zu viele Formularparameter hinterlegt haben, bevorzuge ich dann doch die Lösung aus meiner eigenen Antwort...
Danke und Gruß
Peter