jzhou
Returning Observer

Global gesetzte Variable in Script auslesen

Jump to solution

Hallo Zusammen,

folgendes Szenario:

In den Project Settings setze ich eine globale Variable:

$CMS_SET(gv_preview_ocs_map, {:})$

Im ContentCreator wird beim Klick auf einen Link mittels JavaScript und WE_API ein Script in FS aufgerufen:

top.WE_API.Common.execute("script:set_ocs_id", parameters, callbackFunction);

Das Script "set_ocs_id" soll nun die Variable gv_preview_ocs_map holen und befüllen.

Allerdings komme ich an der Stelle nicht an die Variable ran, da ich mich dann anscheinend in einem Kontext der Klasse WebeditScriptContext befinde (keine Doku dazu gefunden).

--> Ganz anders und einfach ginge es, wenn "set_ocs_id" einfach über $CMS_RENDER(script:"set_ocs_id")$ aufgerufen werden würde, dann könnte ich im Skript "set_ocs_id" die Variable mittels context.getVariableValue("gv_preview_ocs_map"); holen, aber da habe ich wohl einen anderen Kontext.

Da ich aber beim Link-Klick ein paar Parameter von eben dem Link an das Script "set_ocs_id" übergeben möchte, muss ich wohl den Aufruf über JavaScript und die WE_API machen - wie komm ich also in dem Szenario im WebeditScriptContext an die Variable "gv_preview_ocs_map"?

Vielen Dank schonmal!

Viele Grüße

Jenny

 

 

0 Kudos
1 Solution

Accepted Solutions
jzhou
Returning Observer

Hi Timo,

danke für deine Antwort, leider reicht das Auslesen selbst in unserem Fall nicht aus, wir möchten die Variable im Script "set_ocs_id" befüllen und dann wieder im Template weiter verwenden.

Ich habe nun hierfür die Projekt Properties hergenommen:

project.setProperty("variablenname", "wert");

Ist vielleicht auch nicht ideal, aber wenigstens global verfügbar und in jedem Kontext auslesbar und auch befüllbar.

Zur Info falls jemand das hier liest und beschließt auch die Projekt Properties zu verwenden: setProperty() geht nur, wenn der aktuelle Benutzer Projektadmin-Rechte hat. Desweiteren sind diese Properties für das gesamte Projekt gültig, egal welcher Benutzer und welche Session, daher habe ich die aktuelle Benutzer-ID mit in den Variablennamen gepackt.

Viele Grüße

Jenny

View solution in original post

0 Kudos
2 Replies
tfuchs
Elite Observer

Hi jzhou,

im WebeditScriptContext kommst Du nicht an die Variablen, die im Template gesetzt sind. Vielleicht gibt es eine elegantere Lösung, aber wir haben das Problem schonmal so gelöst:

1. Den Inhalt der Variable in ein (verstecktes) HTML-Element schreiben, also bspw.

 

<div id="cc_variables" data-preview-ocs-map="$CMS_VALUE(gv_preview_ocs_map.toJson())$" ....></div>

 

2. Das Element per JavaScript auslesen, bspw. mit jQuery:

 

var preview_ocs_map = $("#cc_variables").data("previewOcsMap");

 

3. Die Variable als Parameter an das Skript übergeben:

 

top.WE_API.Common.execute("script:set_ocs_id", {ocsmap: preview_ocs_map, parameters...}, callbackFunction);

 

4. Im Script set_ocs_id kannst Du dann auf die Variable "ocsmap" zugreifen.

Viele Grüße
Timo

0 Kudos
jzhou
Returning Observer

Hi Timo,

danke für deine Antwort, leider reicht das Auslesen selbst in unserem Fall nicht aus, wir möchten die Variable im Script "set_ocs_id" befüllen und dann wieder im Template weiter verwenden.

Ich habe nun hierfür die Projekt Properties hergenommen:

project.setProperty("variablenname", "wert");

Ist vielleicht auch nicht ideal, aber wenigstens global verfügbar und in jedem Kontext auslesbar und auch befüllbar.

Zur Info falls jemand das hier liest und beschließt auch die Projekt Properties zu verwenden: setProperty() geht nur, wenn der aktuelle Benutzer Projektadmin-Rechte hat. Desweiteren sind diese Properties für das gesamte Projekt gültig, egal welcher Benutzer und welche Session, daher habe ich die aktuelle Benutzer-ID mit in den Variablennamen gepackt.

Viele Grüße

Jenny

0 Kudos