Questions & Answers

SOLVED
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

Type a product name