IngeKroon
Returning Observer

Formatvorlage, Parameter: Wert aus Formatvorlage kommt in der aufrufenden Vorlage nicht an

Jump to solution

Hallo Zusammen,

 

In unserem Projekt jonglieren wir mit Revisionen. In einer Formatvorlage ermittle ich eine bestimmte Revision, die danach in der aufrufenden Vorlage weiter verarbeitet werden soll. Dazu gebe ich die Formatvorlage eine Variable mit einer Revision als Parameter mit, die innerhalb der Formatvorlage verändert werden kann, und nach dem Rendern verwende ich die mitgegebene/zurückgekommene Variable. Eigentlich ein Standardverfahren, wie wir das in unseren Projekten viel verwenden.

Aber in diesem Fall funktioniert es nicht. In der Formatvorlage wird der Wert richtig ermittelt und in den Parameter gesetzt, aber zurück in der Absatzvorlage steht der alte Wert wieder in der Variable drin. Ich kann nicht herausfinden warum der neue Wert nicht an die Absatzvorlage weitergereicht wird.

Die Kode:


IN ABSATZVORLAGE:
$CMS_SET(set_oldRevision, set_lastRev[0]))$
<br>IN ABSATZVORLAGE VOR AUFRUF set_oldRevision: $CMS_VALUE(set_oldRevision.getId())$

$CMS_RENDER(template:"wp_fill_change_revisions", changeRevisions:set_outputRevisions, oldRevision:set_oldRevision)$
<br>IN ABSATZVORLAGE NACH AUFRUF set_oldRevision: $CMS_VALUE(set_oldRevision.getId())$


IN FORMATVORLAGE "wp_fill_change_revisions":
$CMS_IF(isSet(oldRevision) && !set_lastRev.isEmpty)$
$CMS_IF(set_lastRev[0].getId() > oldRevision.getId() || oldRevision.isEmpty)$
$CMS_SET(oldRevision, set_lastRev[0])$
<br>IN FORMATVORLAGE oldRevision: $CMS_VALUE(oldRevision.getId())$
$CMS_END_IF$
$CMS_END_IF$

Die Ausgabe:

IN ABSATZVORLAGE VOR AUFRUF set_oldRevision: 1308639
IN FORMATVORLAGE oldRevision: 1309248
IN ABSATZVORLAGE NACH AUFRUF set_oldRevision: 1308639

Meine Frage ist jetzt: warum sind die Ausgaben aus der Formatvorlage und der Absatzvorlage nach Aufruf nicht identisch?

 

Viele Grüße,

Inge van Schaik

0 Kudos
1 Solution

Accepted Solutions
hoebbel
Crownpeak employee

Hallo Inge,

Ursache des Problems sind die verschiedenen Kontexte, die FirstSpirit bei der Seitenerzeugung nutzt. 
$CMS_SET(<var>,<value>)$ erzeugt eine neue Variable, die in dem aktuellen Kontext gültig ist und Variablen aus höheren Kontexten überschreibt.

Lösung des Problems ist es, die Variable aus dem höheren Kontext zu manipulieren, anstatt eine neue anzulegen. Dazu eignet sich am besten eine Liste oder eine Map.

$CMS_SET(set_oldRevision[0],set_lastRev[0])$

Im Formattemplate muss dann das erste Element der Liste abgefragt oder ersetzt werden. Da hierbei die Variable nicht neu definiert wird, sondern nur der Wert geändert wird, bleibt der geänderte Wert auch im höheren Kontext gültig. 

Anmerkung: Natürlich muss dann an allen Stellen, an denen der Wert geprüft wird, auch auf das erste Element der Liste zugegriffen werden.

Viele Grüße
Holger

View solution in original post

0 Kudos
1 Reply
hoebbel
Crownpeak employee

Hallo Inge,

Ursache des Problems sind die verschiedenen Kontexte, die FirstSpirit bei der Seitenerzeugung nutzt. 
$CMS_SET(<var>,<value>)$ erzeugt eine neue Variable, die in dem aktuellen Kontext gültig ist und Variablen aus höheren Kontexten überschreibt.

Lösung des Problems ist es, die Variable aus dem höheren Kontext zu manipulieren, anstatt eine neue anzulegen. Dazu eignet sich am besten eine Liste oder eine Map.

$CMS_SET(set_oldRevision[0],set_lastRev[0])$

Im Formattemplate muss dann das erste Element der Liste abgefragt oder ersetzt werden. Da hierbei die Variable nicht neu definiert wird, sondern nur der Wert geändert wird, bleibt der geänderte Wert auch im höheren Kontext gültig. 

Anmerkung: Natürlich muss dann an allen Stellen, an denen der Wert geprüft wird, auch auf das erste Element der Liste zugegriffen werden.

Viele Grüße
Holger

0 Kudos