Questions & Answers

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

Type a product name