Search the FirstSpirit Knowledge Base
Hallo,
ich habe ein mehrsprachiges CMS_INPUT_DOM. Wenn in der aktuellen Sprache kein Inhalt vorhanden ist, soll der Inhalt einer anderen Sprache ausgegeben werden. Wie mache ich das?
Ich habe es so versucht aber erhalte immer nur ein leeres Ergebnis
$CMS_SET(actualLanguage,#global.language)$
$CMS_SET(break,false)$
$CMS_SET(text)$
$CMS_IF(st_text.isEmpty)$
$-- if there is no content in the current language, loop through all av. languages to find any content --$
$CMS_FOR(lang, #global.project.languages)$
$CMS_IF(break==false)$
$CMS_SET(#global.language,lang)$
$CMS_IF(!st_text.isEmpty)$
$-- found something --> store and break loop --$
$CMS_VALUE(st_text)$
$CMS_SET(break,true)$
$CMS_END_IF$
$CMS_END_IF$
$CMS_END_FOR$
$CMS_ELSE$
$CMS_VALUE(st_text+"...")$
$CMS_END_IF$
$CMS_END_SET$
$CMS_SET(#global.language,actualLanguage)$
$---------------------------------------$
$CMS_VALUE("'"+text+"'")$
Es geht nur dirty:
1. Merken der aktuellen Projektsprache
2. Umschalten der aktuellen Projektsprache in die gewünschte Inhaltssprache
3. Ausgabe des gesamten Inhalts des FS_LIST Templates (Man kann NICHT absatzweise ausgeben.)
4. Projektsprache wiederherstellen
$CMS_SET(currentLanguage,#global.language)$
$CMS_SET(#global.language,#global.project.language("FI"))$
$CMS_VALUE(#row.column1)$
$CMS_SET(#global.language,currentLanguage)$
wer kann helfen? Danke
Hallo Karsten,
es gibt die Möglichkeit, die Inhalte eines DOM's sprachabhängig aus dem FormData der Section/Page auszulesen. Das könnte in dem von dir verwendeten Kontext dann, wenn du dich in einer Absatzvorlage (Section) befindest, so aussehen (bei page einfach section mit page ersetzen):
$-- found something --> store and break loop --$
$CMS_FOR(lang, #global.project.languages)$
$CMS_IF(break==false)$
$CMS_IF(!#global.section.getFormData.get(lang, "st_text").get().isEmpty)$
$CMS_VALUE(#global.section.getFormData.get(lang, "st_text").get())$
$CMS_SET(break,true)$
$CMS_END_IF$
$CMS_END_IF$
$CMS_END_FOR$
Ich hoffe das hilft dir weiter
Gruß,
Jascha
Nachricht geändert durch Jascha Teichmann
Hallo,
danke für die Antwort. Leider funktioniert es nicht für meinen Anwendungsfall.
Ich verwende das Template aus einem Tabellentemplate heraus, wo es mittels FS_LIST inline eingebunden wird.
Könnte ich da etwas über #row erreichen?
Hallo,
über die #row gibt es leider keine Möglichkeit an das FormData zu kommen.
Würde es helfen, innerhalb einer Content-Abfrage über das Systemobjekt #cs das FormData des aktuellen Datensatzes zu holen?
Dieses Vorgehen habe ich bereits in einem früheren Ticket beschrieben, siehe hier:
$CMS_VALUE(#row.getValue("Bezeichner_EN"))$ für ein DOM-Element
Das dort verwendete #global.language("EN") kann mit lang aus der Schleife ersetzt werden.
Viele Grüße,
Jascha
Den Hinweis verstehe ich nicht. Das Datenmodell von FS_LIST ist eine Liste mit FormData-Instanzen. Auf den Elementen kannst du dann den von Jascha beschriebenen Zugriff (formData.get(lang, "st_text").get()) anwenden.
Hallo,
ich habe alle drei Varianten probiert aber erhalte immer nur einen leeren String, selbst wenn in der Sprache Content gepflegt wurde.
Hier nochmal mein Setting:
Table template:
<FS_LIST name="cs_col1" hFill="yes" rows="10">
<DATASOURCE type="inline" maxEntries="1" useLanguages="no">
<ACTIONS>
<ACTION name="ADD"/>
<ACTION name="EDIT"/>
</ACTIONS>
<COLUMNS>
<COLUMN show="no">#identifier</COLUMN>
</COLUMNS>
<LAYOUT>
<ADD component="toolbar" constraint="top"/>
<ADD component="overview" constraint="hide"/>
<ADD component="stackedview" constraint="center"/>
</LAYOUT>
<TEMPLATES source="sectiontemplates">
<TEMPLATE uid="text_for_news"/>
</TEMPLATES>
</DATASOURCE>
<LANGINFOS>
<LANGINFO lang="*" label="Write article"/>
<LANGINFO lang="DE" label="Artikel schreiben"/>
</LANGINFOS>
</FS_LIST>
Section Template Form:
<CMS_INPUT_DOM
name="st_text"
allowEmpty="yes"
hFill="yes"
list="yes"
listConfig="style:Listenart[1:unnummeriert|2:nummeriert]"
rows="25"
useLanguages="yes">
<FORMATS>
<TEMPLATE name="h2"/>
<TEMPLATE name="h3"/>
<TEMPLATE name="einrueckung__tab_"/>
<TEMPLATE name="text_farbe_blau"/>
<TEMPLATE name="text_farbe_rot"/>
<TEMPLATE name="text_farbe_gruen"/>
</FORMATS>
<LANGINFOS>
<LANGINFO lang="*" label="text input field"/>
<LANGINFO lang="DE" label="Texteingabefeld"/>
</LANGINFOS>
<LINKEDITORS>
<LINKEDITOR name="document_link"/>
<LINKEDITOR name="internal_link"/>
<LINKEDITOR name="normal_link"/>
<LINKEDITOR name="normal_link_ext"/>
</LINKEDITORS>
</CMS_INPUT_DOM>
Section Template HTML:
<CMS_HEADER>
</CMS_HEADER>
'$CMS_VALUE(#cs.dataset.formData.get(#global.project.language("EN"), "st_text").get())$'
'$CMS_VALUE(#global.section.getFormData.get(#global.project.language("EN"), "st_text").get())$'
'$CMS_VALUE(#global.page.getFormData.get(#global.project.language("EN"), "st_text").get())$'
$---------------------------------------$
$CMS_VALUE(st_text)$
Ausgabe
Kennt jemand eine Lösung?
Wenn in einer Tabellenvorlage über eine FS_LIST Absätze eingebunden werden, dann muss der Aufruf in der Ausgabe der Tabellenvorlage erfolgen. Man iteriert mit CMS_FOR über die FS_LIST und holt sich mit .get() den sprachabhängigen Wert aus dem DOM, das könnte dann so aussehen:
$CMS_FOR(for_section,cs_col1)$
$CMS_VALUE(for_section.get(#global.project.language("EN"), "st_text").get())$
$CMS_END_FOR$
Der Aufruf muss dann nur passend in seinen Kontext eingebaut werden.
Viele Grüße,
Jascha
Hallo Karsten,
benötigst Du noch weitere Hilfe oder hat dir die Antwort bereits geholfen?
In diesem Fall wäre es super, wenn Du sie als "richtige Antwort" entsprechend markierst, damit auch andere
Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung
gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.
Viele Grüße,
Jascha