Skip to main content

Werte aus einer Absatzvorlage auf Stufe Seitenvorlage auslesen

Comments

5 comments

  • Holger Höbbel

    Hallo Thomas,

    ich würde es so machen:

    $CMS_FOR(for_section,#global.page.body("main_content").children)$
    $CMS_IF(for_section.template.uid == "content_header")$
    $CMS_VALUE(for_section.formData.get(#global.language,"st_description").get())$
    $CMS_SET(void, #for.BREAK)$
    $CMS_END_IF$
    $CMS_END_FOR$

    Erklärung: Da die Formatvorlage im Kontext der Seite ausgegeben wird, hat sie alle Variablen der Seite zur Verfügung. Somit kann mittels #global.page.body(<UID>) der Absatzbereich geholt werden. Zu dessen Kindern zählen auch alle Absätze (das auch andere Objekte, z.B. Sprachknoten beim Iterieren zurück geliefert werden, spielt durch die CMS_IF Abfrage keine Rolle. Insofern habe ich nicht nur Kinder der Klasse Section geholt, was zwar sauberer wäre, den Code aber imho unnötig aufblähen würde).

    Beim ersten Absatz, der auf der Vorlage mit der UID "content_header" beruht, holt man sich das formData und aus diesem den Wert der gewünschten Eingabekomponente. 
    Das #for.BREAK dient dazu, dass die Iteration abgebrochen wird und nur das erste Vorkommen berücksichtigt wird (falls Redakteure den Absatz mehrfach in dem Absatzbereich benutzen).

    Viele Grüße
    Holger

    0
  • Thomas Biedermann

    Hooii Holger

    Vielen lieben DANK! Man han ich herumgesucht dabei ist Lösung so einfach.

    Jetzt klappt es!!!

    Viele Grüsse
    Thomas

    0
  • Thomas Biedermann

    Hallo Holger, Ich habe noch einmal eine Herausforderung.

    cs_detailContent -> FS_CATALOG

    Ich muss in einer Datenquelle auf das Feld cs_detailContent -> FS_CATALOG zugreifen können und hier den ersten Eintrag holen und das Feld st_description auslesen.

    Was habe ich schon gemacht und funktioniert

    $CMS_SET(entity, #global.multiPageParams.data.get(#global.pageParams.index))$

    $CMS_IF(#global.multiPageParams.entitiesPerPage == 1 && #global.multiPageParams.data.size() > 0)$
        $CMS_IF(!entity.description.isEmpty)$
            <meta name="description" content="$CMS_RENDER(script:"get_meta_description", pa_description:entity.description.toText(false))$" />
        $CMS_ELSIF(!entity.INTROTEXT.isEmpty)$
            <meta name="description" content="$CMS_RENDER(script:"get_meta_description", pa_description:entity.INTROTEXT.toText(false))$" />
        $CMS_ELSIF(!entity.TEASER.isEmpty)$
            <meta name="description" content="$CMS_RENDER(script:"get_meta_description", pa_description:entity.TEASER)$" />   
        $CMS_END_IF$
    $CMS_ELSIF(#global.template.uid.equals("default"))$
    ......

    Grüsse, Thomas

    0
  • Holger Höbbel

    Hallo Thomas,

    wenn ich es richtig verstehe hast Du das Problem, dass Du aus einer Entity den Inhalt einer FS_CATALOG auslesen willst. 

    Das wäre sehr umständlich, deshalb lasse ich den Weg hier mal weg. Statt dessen musst Du dir den Dataset holen (<entity>.getDataset("<UID Table.template>")) und dort über das FormData die Eingabekomponente und aus der die Cards.

    Also etwas in dieser Art:

    $CMS_SET(set_dataset,entity.getDataset("Schema.Tabletemplate"))$
    $CMS_VALUE(set_dataset.formData.cs_detailContent.items.get(0).st_description)$

    Erklärung:
    die erste Zeile habe ich ja schon oben erklärt. Hier muss nur der String durch die UID einer Tabellenvorlage ersetzt werden, auf der die FS_CATALOG-Eingabekomponenten "cs_detailContent" definiert und gemappt ist.
    In der zweiten Zeile wird aus dem Dataset das formData geholt und von diesem die Eingabekomponente cs_detailContent. da dies ein CATALOG ist, kann man daraus wiederum die Cards mittels ".items" holen. Von der ersten (get(0)) dann direkt die Eingabekomponente st_description ausgeben. 

    Viele Grüße,
    Holger

    0
  • Thomas Biedermann

    Hallo Holger

    Voll cool, danke... so einfach.... jetzt klappt auch das ;)

    $CMS_IF(#global.multiPageParams.entitiesPerPage == 1 && #global.multiPageParams.data.size() > 0)$
        $CMS_SET(entity, #global.multiPageParams.data.get(#global.pageParams.index))$
        $CMS_SET(entityTypeName, entity.getEntityType().getName())$

        $CMS_IF(!entity.INTROTEXT.isEmpty)$
            <meta name="description" content="$CMS_RENDER(script:"set_meta_description", pa_description:entity.INTROTEXT.toText(false).trim())$" />

        $CMS_ELSIF(!entity.TEASER.isEmpty)$
            <meta name="description" content="$CMS_RENDER(script:"set_meta_description", pa_description:entity.TEASER.toText(false).trim())$" />

        $CMS_ELSE$
            $CMS_SET(datasetMapping, {
                "T_PRODUCT": "sfs_cms_db.t_product",
                "T_TECHNOLOGY": "sfs_cms_db.lj_t_technology",
                "T_SERVICE": "sfs_cms_db.t_service"
            })$

            $CMS_IF(datasetMapping.containsKey(entityTypeName))$
                $CMS_SET(set_dataset, entity.getDataset(datasetMapping.get(entityTypeName)))$
                $CMS_IF(!set_dataset.formData.cs_detailContent.items.isEmpty)$
                    $CMS_SET(descItem, set_dataset.formData.cs_detailContent.items.get(0))$
                    $CMS_IF(!descItem.st_description.isEmpty)$
                        <meta name="description" content="$CMS_RENDER(script:"set_meta_description", pa_description:descItem.st_description.trim())$" />
                    $CMS_END_IF$
                $CMS_END_IF$
            $CMS_END_IF$
        $CMS_END_IF$

    $CMS_ELSIF(#global.template.uid.equals("default"))$

        $CMS_IF(!pt_metaDescription.isEmpty)$
            <meta name="description" content="$CMS_RENDER(script:"set_meta_description", pa_description:pt_metaDescription.toText(false).trim())$" />

        $CMS_ELSIF(!pt_introText.isEmpty)$
            <meta name="description" content="$CMS_RENDER(script:"set_meta_description", pa_description:pt_introText.toText(false).trim())$" />

        $CMS_ELSE$
            $CMS_FOR(sec, #global.page.body("main_content").children)$
                $CMS_IF(sec.template.uid == "content_header")$
                    $CMS_SET(secDesc, sec.formData.get(#global.language,"st_description").get())$
                    $CMS_IF(!secDesc.isEmpty)$
                        <meta name="description" content="$CMS_RENDER(script:"set_meta_description", pa_description:secDesc.toText(false).trim())$" />
                    $CMS_END_IF$
                    $CMS_SET(void, #for.BREAK)$
                $CMS_END_IF$
            $CMS_END_FOR$
        $CMS_END_IF$

    $CMS_END_IF$

    Grüsse aus der Schweiz
    Thomas

    0

Please sign in to leave a comment.