captFuture
I'm new here

In einer Seite gesetzte Variable über die Navigationsfunktion auslesen

Jump to solution

Guten Morgen,

Ich bin auf der Suche nach einer Möglichkeit eine in verschiedensten Seiten gesetzte Variable (sie wird mit $CMS_SET gesetzt) über die Navigationsfunktion Sitemap auszulesen und dort darzustellen.

Die Sitemap sieht in etwa so aus:

<CMS_HEADER>

<CMS_FUNCTION name="Navigation" resultname="jsonSitemap">

<CMS_PARAM name="expansionVisibility" value="all"/>

<CMS_PARAM name="wholePathSelected" value="0"/>

<CMS_PARAM name="siteMap" value="1" />

<CMS_ARRAY_PARAM name="pageRefRendering">

<CMS_ARRAY_ELEMENT index="0..1000"><![CDATA[

$CMS_SET(multiPageParams, #nav.ref.getMultiPageParams(#global.language, #global.templateSet))$

$CMS_FOR(i, [0 .. multiPageParams.pageCount - 1])$

$CMS_SET(htmlTeaser)$$CMS_TRIM(level:4)$$CMS_VALUE(#nav.ref.page.........................DA KOMM ICH NICHT WEITER.............................)$$CMS_END_TRIM$$CMS_END_SET$

$CMS_IF(!#nav.ref.meta("md_teaserheadline").isEmpty())$

$CMS_IF(!#nav.ref.meta("md_image").isEmpty())$

$CMS_IF(CHECKEDENV.toString.contains(ENV.toString))$

{

"itemId": "$CMS_VALUE(#nav.ref.id)$",

"title": "$CMS_VALUE(#nav.ref.meta("md_teaserheadline","inherit"))$",

"content": "$CMS_VALUE(htmlTeaser,default:"")$",

.

.

.

.

}

vielen dank für die Hilfe

C

0 Kudos
1 Solution

Accepted Solutions

Ich hab das nun selbst lösen können und möchte natürlich das Ganze für andere zur Verfügung stellen.

Hiermit bereite ich mir eine Variable TeaserTitle vor, welche ich dann im Jsonresultat der navigationsfunktion verwenden kann.

$CMS_IF(#nav.ref.page.body("content_center").children.first.template.uid == "detail_header")$

    $CMS_SET(TeaserTitle)$$CMS_TRIM(level:4)$

        $CMS_VALUE(#nav.ref.page.body("content_center").getFirstChild().getFormData().get(#global.language,"st_content_right").get())$

    $CMS_END_TRIM$$CMS_END_SET$

$CMS_END_IF$

Im Json verwende ich dann das erhaltene Html:

"teaserHtml":"$CMS_VALUE(htmlTeaser.toString().replace("\"","'"),default:"")$",


Ich hoffe das hilft jemandem weiter :smileygrin:

View solution in original post

0 Kudos
3 Replies
mbergmann
Crownpeak employee

Hallo Christoph,

verstehe ich das Richtig: Du hast eine Seite A, in deren Template ein $CMS_SET(myVar, ...)$ benutzt wird und willst innerhalb einer Navigationsfunktion die sich auf einer anderen Seite befindet das myVar auslesen?

Falls das gemeint ist: Das kann so nicht funktionieren, da die Variablen ja erst zum Zeitpunkt der Generierung der Seite befüllt werden und dann auch nur im Seitenkontext verfügbar sind und nicht "von außen", insbesondere werden die Werte ja nirgend gespeichert.

Etwas anderes wäre es, wenn Du auf Daten zugreifen willst, die sich im Formular der Seite befinden.

Viele Grüße

Michael

0 Kudos

Danke Michael,

Ganz konkret hab ich auf der Seite eine FS_CATALOG komponente, deren inhalt in der navigationsfunktion (im prinzip ist es ein json das generiert wird und von einem rest-interface gelesen und wieder ausgegeben wird, um teaser für übersichtsseiten anzeigen zu können).

Du hast geschrieben, dass die variable nicht befüllt ist, da sie erst zum zeitpunkt der generierung zur verfügung steht.

Somit müsste ich eigentlich ja nur auf daten aus dem Formular zugreifen.
... ich bin gerade bei $CMS_VALUE(#nav.ref.page.body("content_center"))$ stecken geblieben und müsste nun auf den absatz und dann die eingabekomponente kommen.

Liebe Grüße
Christoph

0 Kudos

Ich hab das nun selbst lösen können und möchte natürlich das Ganze für andere zur Verfügung stellen.

Hiermit bereite ich mir eine Variable TeaserTitle vor, welche ich dann im Jsonresultat der navigationsfunktion verwenden kann.

$CMS_IF(#nav.ref.page.body("content_center").children.first.template.uid == "detail_header")$

    $CMS_SET(TeaserTitle)$$CMS_TRIM(level:4)$

        $CMS_VALUE(#nav.ref.page.body("content_center").getFirstChild().getFormData().get(#global.language,"st_content_right").get())$

    $CMS_END_TRIM$$CMS_END_SET$

$CMS_END_IF$

Im Json verwende ich dann das erhaltene Html:

"teaserHtml":"$CMS_VALUE(htmlTeaser.toString().replace("\"","'"),default:"")$",


Ich hoffe das hilft jemandem weiter :smileygrin:

0 Kudos