Werte aus einer Absatzvorlage auf Stufe Seitenvorlage auslesen
Hallo zusammen
Ich habe die Formatvorlage "header" die in der "default" Seitenvorlage eingebaut ist.
In der "header" Formatvorlage muss auf den Absatz content_header zugreifen und den Wert aus dem Feld st_description auslesen.
Wie kann ich das machen?
<CMS_INPUT_TEXTAREA name="st_description" allowEmpty="no" hFill="yes" useLanguages="yes">
<LANGINFOS>
<LANGINFO lang="*" label="Subline"/>
</LANGINFOS>
</CMS_INPUT_TEXTAREA>

Grüsse, Thomas
-
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
Holger0 -
Hooii Holger
Vielen lieben DANK! Man han ich herumgesucht dabei ist Lösung so einfach.
Jetzt klappt es!!!
Viele Grüsse
Thomas0 -
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 -
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,
Holger0 -
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
Thomas0
Please sign in to leave a comment.
Comments
5 comments