Questions & Answers

SOLVED
seegers
Returning Observer

Variable aus der Generierung in den Projekteinstellungen auswerten

Jump to solution

Servus FS-Community,

ich kann einen Ablauf hier nicht nachvollziehen:

In den Generierungsauftrรคgen von meinem Projekt setze ich eine Variable:

dv_stagervw

Auf diese mรถchte ich im Template der Projekteinstellungen zugreifen:

$CMS_IF("rvw".equals(dv_stage))$

    $CMS_SET(ps_projectdomain_res,ps_projectdomain_res+"/media")$

$CMS_END_IF$

Aber dieser Test schlรคgt fehl, obwohl:

$CMS_SET(test1)$$CMS_VALUE(dv_stage)$$CMS_END_SET$ //Wert: rvw

$CMS_SET(test2)$$CMS_VALUE(dv_stage.getClass())$$CMS_END_SET$ //Wert: java.lang.String

$CMS_SET(test3)$$CMS_VALUE("rvw".equals(dv_stage))$$CMS_END_SET$ //Wert: true

$CMS_SET(test4)$$CMS_VALUE("rvw".equals(dv_stage).getClass())$$CMS_END_SET$ //Wert: java.lang.Boolean

$CMS_SET(key)$value$CMS_END_SET$ liefert mir hier ein TemplateDocumentImpl zurรผck, wรคhrend

$CMS_SET(key,value)$ mir Null bzw. Undefined zurรผck gibt.

Die Sonderfรคlle zu den Variabeln in den Kontextenโ€‹ habe ich mir angesehen und kann das obige Verhalten dennoch nicht ganz nachvollziehen.

Vermutlich liegt es an der Art, wie $CMS_SET(key)$value$CMS_END_SET$ die Ergebnisse holt. Denn sonst mรผsste meine IF-Abfrage ja funktionieren.

Meine Frage ist also: Wie komme ich im Template der Projekteinstellungen an den Wert einer Variable, die im Generierungskontext gepflegt ist?

Besten Dank im voraus,

Renรฉ

PS: FS5.2 wird verwendet.

0 Kudos
1 Solution

Accepted Solutions
hoebbel
Crownpeak employee

Hallo Renรฉ,

das ist auch erwartungskonform, da in var2 "$CMS_VALUE(dv_stage)$" steht. An der Stelle, wo dann var2 ausgegeben wird, steht die Variable zur Verfรผhgung und kann ausgegeben werden.

Viele Grรผsse aus Dortmund,

Holger

View solution in original post

0 Kudos
9 Replies
marro
Crownpeak employee

Hallo Renรฉ,

hast Du mal ein

$CMS_SET(dv_stage_val)$$CMS_VALUE(dv_stage)$$CMS_END_SET$

$CMS_IF("rvw".equals(dv_stage_val))$ 

    $CMS_SET(ps_projectdomain_res,ps_projectdomain_res+"/media")$ 

$CMS_END_IF$

ausprobiert?

Viele GrรผรŸe

Donato

0 Kudos
seegers
Returning Observer

Hallo Donato,

ja, habe ich, nein, funktioniert leider nicht.

//$-- im Templatee der Projekteinstellungen --$

$CMS_SET(dv_stage_val)$$CMS_VALUE(dv_stage)$$CMS_END_SET$

$CMS_IF("rvw".equals(dv_stage))$

  $CMS_SET(ps_result1,"success")$

$CMS_END_IF$

$CMS_IF("rvw".equals(dv_stage_val))$

  $CMS_SET(ps_result2,"success")$

$CMS_END_IF$

//$-- in einem Seitentemplate --$

$CMS_SET(dv_stage_val)$$CMS_VALUE(dv_stage)$$CMS_END_SET$ 

$CMS_IF("rvw".equals(dv_stage))$   

    $CMS_SET(pt_result1,"success")$   

$CMS_END_IF$

$CMS_IF("rvw".equals(dv_stage_val))$   

    $CMS_SET(pt_result2,"success")$   

$CMS_END_IF$

//$-- Ausgabe im Seitentemplate --$                    Ausgabe:

$CMS_VALUE(dv_stage.getClass(),default:"foo")$<br>     //java.lang.String

$CMS_VALUE(dv_stage_val.getClass(),default:"foo")$<br> //de.espirit.firstspirit.parser.impl.TemplateDocumentImpl

$CMS_VALUE(ps_result1,default:"fail ps1")$<br>         //fail ps1

$CMS_VALUE(ps_result2,default:"fail ps2")$<br>         //fail ps2

$CMS_VALUE(pt_result1,default:"fail pt1")$<br>         //success

$CMS_VALUE(pt_result2,default:"fail pt2")$<br>         //fail pt2

Also, in einem Seitentemplate funktioniert es, wenn ich den Wert der Variable direkt vergleiche.

Dein Vorschlag funktioniert nicht, vermutlich da hier ein String ("rvw") mit einer TemplateDocumentImpl verglichen wird.

Im Template fรผr die Projekteinstellungen funktioniert jedoch beides nicht. Genau dort hรคtte ich es aber eigentlich gerne ausgewertet, um es nur an einer Stelle zu haben. Im Template der Projekteinstellungen liefert mir wie schon oben geschrieben die TemplateDocumentImpl den gewรผnschten Wert zurรผck, nur fรผr einen Vergleich kann ich diesen nicht nutzen.

Ich habe die Aufgabenstellung fรผr mich mittlerweile anders gelรถst, wรคre aber an einer Klรคrung dennoch grundsรคtzlich interessiert.

GruรŸ,

Renรฉ

0 Kudos
felix_reinhold
Returning Responder

Wird der Variablenwert nicht inline, sondern in einem CMS_SET/CMS_END_SET Block definiert, wird immer ein TemplateDocument erzeugt, dass dann mit einem entsprechenden Evaluator geparsed wird, sobald die Variable ausgewertet wird. Fรผr einen Vergleich mรผsstest du also noch ein toString() auf der gesetzten Variable machen --> Das erstmal zum TemplateDocument ๐Ÿ™‚

Bzgl. der Variable:

Meines Wissens werden die Variablen aus dem Generierungsauftrag in den SITE-STORE Kontext geladen und stehen somit nicht in den Projekteinstellungen zur Verfรผgung, da diese ja im root-Kontext laufen. Das sollte am besten nochmal jemand von e-spirit bestรคtigen.

GruรŸ

Felix

0 Kudos

Hi Felix,

soweit ist dies alles klar. Aber was ich nicht nachvollziehen kann:

//Template der Projekteinstellungen

$CMS_SET(var1,dv_stage)$

$CMS_SET(var2)$$CMS_VALUE(dv_stage)$$CMS_END_SET$

//Ausgabe im Seitentemplate

$CMS_VALUE(var1,default:"")$ //undefined

$CMS_VALUE(var2,default:"")$ //rvw

Die Reihenfolge, wie die Variabeln und Kontexte ausgewertet werden, erschlieรŸt sich mir noch nicht so ganz recht.

Im ersten Fall ist die im Generierungsauftrag gesetzte Variable wohl nicht verfรผgbar (wie du auch schon angefรผhrt hast).

Im zweiten Fall lรคuft es aber wohl irgendwie anders. Und habe ich es mir bislang nicht zusammen reimen kรถnnen, warum dies so passiert, in welcher Reihenfolge hier die Objekte und Kontexte ausgewertet werden. Initial erschien es mir, als ob ich mit dem zweiten Fall doch den Wert im Template der Projekteinstellungen hรคtte verwenden kรถnnen. Aber vermutlich ist dies nicht der Fall. Nur kann ich bislang diese Vermutung weder positiv noch negativ erklรคren.

GruรŸ,

Renรฉ

0 Kudos
seegers
Returning Observer

Ergรคnzend:

Dieses hier funktioniert als Lรถsung fรผr die ursprรผngliche Fragestellung, aber nur sofern varX vor ps_projectdomain im Seitenkontext aufgerufen wird. Aber es macht wenig Sinn, wenn ich nun auf allen Seiten varX einfรผgen mรผsste. Ich wollte ja alles schรถn zentral haben.

$CMS_SET(varX)$

  $CMS_IF("rvw".equals(dv_stage))$

    $CMS_SET(ps_projectdomain,ps_projectdomain+"/media")$

  $CMS_END_IF$

$CMS_END_SET$

Aber es bestรคrkt mich in meiner Vermutung, dass es im Aufruf der Objekte zu signifikanten Unterschieden kommt.

0 Kudos
hoebbel
Crownpeak employee

Hallo Renรฉ,

> In den Generierungsauftrรคgen von meinem Projekt setze ich eine Variable:

Diese Variable wird so behandelt, als wรผrde Sie auf dem Root Knoten der Seitenvorlage gesetzt werden.

Sie kann somit รผber Struktur-Variablen auf tieferen Ordnern รผberschrieben werden.

Allerdings steht Sie in Kontext der Projekt-Einstellungsseite nicht zur Verfรผgung, da diese "รผber" dem Sitestore Root Kontext angesiedelt ist.

Viele Grรผsse aus Dortmund,

Holger

0 Kudos
seegers
Returning Observer

Hallo Holger,

danke fรผr die Rรผckmeldung. Dies erklรคrt fรผr mich den Fall bei "var1".

Bei "var2" bekomme ich schluรŸendlich jedoch noch den Wert zurรผck. Was lรคuft hier anders? Dieses Verhalten kann ich leider nicht mit deiner Erlรคuterung in Einklang bringen, ein Puzzelstรผck scheint mir hier noch zu fehlen.

  1. //Template der Projekteinstellungen
  2. $CMS_SET(var1,dv_stage)$ 
  3. $CMS_SET(var2)$$CMS_VALUE(dv_stage)$$CMS_END_SET$ 
  4. //Ausgabe im Seitentemplate 
  5. $CMS_VALUE(var1,default:"")$ //undefined 
  6. $CMS_VALUE(var2,default:"")$ //rvw 

GruรŸ,

Renรฉ

0 Kudos
hoebbel
Crownpeak employee

Hallo Renรฉ,

das ist auch erwartungskonform, da in var2 "$CMS_VALUE(dv_stage)$" steht. An der Stelle, wo dann var2 ausgegeben wird, steht die Variable zur Verfรผhgung und kann ausgegeben werden.

Viele Grรผsse aus Dortmund,

Holger

0 Kudos
seegers
Returning Observer

Mit deinen Worten aus dem anderen Thread:

$CMS_SET(myVar)$<some code>$CMS_END_SET$ speichert den nicht ausgefรผhrten Code, nicht das Ergebnis.

Jetzt ist der Groschen auch bei mir gefallen.

GruรŸ und Dank,

Renรฉ

0 Kudos

Type a product name