Karsten
I'm new here

CMS_INPUT_DOM in anderer Sprache ausgeben

Jump to solution

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+"'")$

0 Kudos
1 Solution

Accepted Solutions

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)$

View solution in original post

0 Kudos
10 Replies
Karsten
I'm new here

wer kann helfen? Danke

0 Kudos

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 Smiley Wink

Gruß,

Jascha


Nachricht geändert durch Jascha Teichmann

0 Kudos

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?

0 Kudos

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

0 Kudos

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.

Peter
0 Kudos

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

2014-04-04 13_50_00-(0000)  StoInside (Benutzer_ dewe0815) - FirstSpirit Client @ dewecmsp.png

0 Kudos

Kennt jemand eine Lösung?

0 Kudos

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

0 Kudos

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

0 Kudos