bit_mbrandt
I'm new here

Zugriff in Seitenvorlage auf Datensatz einer Datenquelle in einem bestimmten Absatz

Jump to solution

Hallo,

wir haben auf einer Seite mehrere Absatzvorlagen in verschiedenen Inhaltsbereichen (z.B. Content-Spalte und Teaser-Spalte), die jeweils einen Datensatz aus einer Datenquelle anzeigen. Diese Datensätze unterscheiden sich, d.h. auf der gesamten Seite werden aus einer Datenquelle zwei oder mehr verschiedene Datensätze angezeigt.

Nun soll auf der Seite die Überschrift des Datensatzes in der Content-Spalte den Title-Tag der Seitenvorlage füllen. Unser Ansatz hierzu wäre es über folgenden Aufruf den Inhalt des Datensatzes in der Seitenvorlage zu ermitteln:

$CMS_IF(!#global.multiPageParams.data.get(0).getValue("title_DE").isEmpty)$

        $CMS_SET(lv_calculated_titletag, #global.multiPageParams.data.get(0).getValue("title_DE"))$

        $CMS_SET(lv_thistitle, lv_calculated_titletag)$

$CMS_END_IF$

Werden aber mehrere Datenquellen eingebunden, müssten wir den Index im Aufruf "#global.multiPageParams.data.get(0)" dediziert zu der entsprechenden Absatzvorlage zuordnen können.

Daher unsere Frage: Wie können wir in der Seitenvorlage dediziert auf den Inhalt des Datensatzes zugreifen, der in einem bestimmten Absatz angezeigt wird?

Viele Grüße,

Martin Brandt

0 Kudos
1 Solution

Accepted Solutions
stephan
I'm new here

Hallo Herr Brandt,

der von Ihnen beschriebene Ansatz funktioniert nur bei Contentprojektionsseiten. Da sie aber geschrieben haben, dass sie mehrere Datenquellen auf einer Seite eingebunden haben, scheinen sie die Contentselect-Funktion zu benutzen, denn bei Contentprojektion ist nur eine Datenquelle pro Seite möglich.

In ihrem Fall hat man also das Problem, dass der Wert der auszugeben ist später gerendert wird, als die Stelle wo man den Wert schon ausgeben will. Hier könnte ein kleiner Trick helfen, der den Body-Bereich schon zu Beginn der Seite rendert.

Dazu benutzt man z.B. folgenden Aufruf:

$CMS_SET(set_pt_bodycenter)$$CMS_RENDER(template:"WEBeditInplaceBody", name:"Content center")$$CMS_END_SET$$CMS_SET(set_pt_bodycenter, set_pt_bodycenter.toString)$

Den Body-Bereich kann man später im Seitentemplate an der alten Stelle ausgeben über

$CMS_VALUE(set_pt_bodycenter)$

Jetzt besteht noch das Problem, das Variablen aus der Absatzvorlage nicht in der Seitenvorlage zu Verfügung stehen. Daher schreibt man diese am besten in den Seitenkontext:

$CMS_SET(#global.pageContext["myVar"],"value")$

Jetzt kann man sie auf der Seite, z.B. als Seitentitel verwenden:

<title>$CMS_VALUE(#global.pageContext["myVar"])$</title>

Viele Grüße

Jörg Stephan

View solution in original post

0 Kudos
1 Reply
stephan
I'm new here

Hallo Herr Brandt,

der von Ihnen beschriebene Ansatz funktioniert nur bei Contentprojektionsseiten. Da sie aber geschrieben haben, dass sie mehrere Datenquellen auf einer Seite eingebunden haben, scheinen sie die Contentselect-Funktion zu benutzen, denn bei Contentprojektion ist nur eine Datenquelle pro Seite möglich.

In ihrem Fall hat man also das Problem, dass der Wert der auszugeben ist später gerendert wird, als die Stelle wo man den Wert schon ausgeben will. Hier könnte ein kleiner Trick helfen, der den Body-Bereich schon zu Beginn der Seite rendert.

Dazu benutzt man z.B. folgenden Aufruf:

$CMS_SET(set_pt_bodycenter)$$CMS_RENDER(template:"WEBeditInplaceBody", name:"Content center")$$CMS_END_SET$$CMS_SET(set_pt_bodycenter, set_pt_bodycenter.toString)$

Den Body-Bereich kann man später im Seitentemplate an der alten Stelle ausgeben über

$CMS_VALUE(set_pt_bodycenter)$

Jetzt besteht noch das Problem, das Variablen aus der Absatzvorlage nicht in der Seitenvorlage zu Verfügung stehen. Daher schreibt man diese am besten in den Seitenkontext:

$CMS_SET(#global.pageContext["myVar"],"value")$

Jetzt kann man sie auf der Seite, z.B. als Seitentitel verwenden:

<title>$CMS_VALUE(#global.pageContext["myVar"])$</title>

Viele Grüße

Jörg Stephan

0 Kudos