RZoller
Returning Observer

Seitenglobale Variablen in FirstSpirit

Hallo zusammen,

ich habe das Problem, dass ich alle Links innerhalb des eines bestimmten Body-Bereiches nummerieren muss. Dafür habe ich im Seiten-Template eine Variable gesetzt:

$-- TEST --$
$CMS_SET(link_counter, 0)$
$-- END TEST --$

In den Linkvorlage habe ich anschließend folgendes eingebaut, dass den Zähler hochsetzen soll:

<a href="$CMS_RENDER(template:"intern_link", pageref:sitestoreref)$$CMS_IF(!sitestoreref.getSection.isEmpty)$#$CMS_VALUE(sitestoreref.getSection.getId())$$CMS_END_IF$"
       target="$CMS_VALUE(if(!linkTarget.isEmpty,linkTarget.toString,"_self"))$"
       title="$CMS_VALUE(comment.convert2,default:"")$">>>Hier: $CMS_IF(isSet(link_counter))$ $CMS_VALUE(link_counter)$$CMS_END_IF$$CMS_SET(link_counter, link_counter+1)$ $CMS_VALUE(link_counter)$<<$CMS_VALUE(text.convert2,default:"")$</a>

Leider erhalte ich bei allen Links als Ausgabe immer Hier: 0 1. Wie kann ich die Links auf einer Seite zählen, bzw. kann man überhaupt soetwas wie eine Seiten-Globale Variable setzten?

Viele Grüße

René Zoller

5 Replies
hoebbel
Crownpeak employee

Hallo,

es gibt zwei mögliche Schreibweisen, um die Variable nicht im aktuellen, sondern in einem angegebenen Kontext zu ändern [hier der Seitenkontext, also "PAGE"]

$CMS_SET(#global.context("PAGE")["link_counter"], link_counter + 1)$

$CMS_SET(#global.context("PAGE").link_counter, link_counter + 1)$

Hintergrund:

Änderungen an Variablen werden im aktuellen Kontext durchgeführt. [Im Absatz also im Kontext "SECTION"].

Eine Variable ist immer im aktuellen und allen darunterliegenden Kontexten gültig [deshalb kann eine in den Projekteinstellungen definierte Variable [Kontext "global"] als auch eine Struktur-Variable [Kontext "SITESTORE"] sowohl auf einer Seite als auch einem Absatz einfach ausgegeben werden.

Wenn die entsprechende Variable in einem "niedrigeren" Kontext [im Beispiel wird die Variable aus dem Seitenkontext im Absatzkontext überschrieben] überschrieben wird, so ist diese variable aus dem "niedrigeren" Kontext gültig, solange dieser Kontext existiert (im Beispiel also solange, bis der nächste Absatz ausgegeben wird)

Viele Grüsse aus Dortmund,

  Holger

RZoller
Returning Observer

Hat alles wunderbar funktioniert. Vielen Dank für die schnelle Antwort!

René

0 Kudos
RZoller
Returning Observer

Die Lösung für eine einfach Zahl funktioniert soweit. Versuche ich aber einer Array-List etwas hinzuzufügen, kommt in der Variablen nichts an?

Im Seitentemplate steht:

$CMS_SET(page_links, [])$

In der Linkvorlage steht analog zur Lösung oben:

$CMS_SET(void, #global.context("PAGE").page_links.add("tmp"))$

Jedoch ergibt Auswertung von $CMS_VALUE(page_links.size())$ immer 0. Mach ich hier etwas falsch?

Viele Grüße

René

0 Kudos
hoebbel
Crownpeak employee

Hallo René,

die Array List steht im Generierungskontext der Seite. Hier müsste es eigentlich ausreichend sein, wenn Du im Absatz entsprechende Elemente hinzufügst - diese sollten dann eigentlich automatisch im Generierungskontext der Seite verfügbar sein.

Aber eigentlich müsste das Setzen der Variable über den definierten Generierungskontext auch funktionieren. Die Linkvorlage wird auch garantiert nach der Definition aufgerufen?

Und wo gibst Du die Größe aus?

Und wird wirklich nur ein String dem Array hinzugefügt?

0 Kudos

Hallo René,

du kannst auch mal in der FS-API nach Context schauen, da gibt es Methoden um z.B. alle Variablennamen auszugeben und zu setzen. Unter 4.1 konnte ich mit $CMS_SET(#global.context("Page").name, 1)$ den Wert nicht verändern aber mit der set Methode aus der API hat alles Prima funktioniert.

Gruß, Johannes

0 Kudos