npsobj_modifyvar_set ::= ( <npsobj modifyvar = "set" varname = "name" name = "varValueKey" [ local = "( true | false )" ] /> ) | ( <npsobj modifyvar = "set" varname = "name" [ local = "( true | false )" ]>varValue</npsobj> )
Export-Variablen können dazu verwendet werden, während des Exports einer Datei Zeichenketten oder Kontextlisten unter einem Namen zu speichern. Auf die Werte kann man zugreifen, indem man die Namen so referenziert wie andere während des Exports gültige Namen auch.
Wird das ab Version 6.7.1 verfügbare Attribut local
mit dem Wert true
angegeben, so sind die mit dieser Anweisung erzeugten Exportvariablen nur in genau der Layoutdatei sichtbar, in der sie erzeugt wurden. Ihr Geltungsbereich ist in diesem Fall also auf das aktuelle Layout beschränkt, d.h. die Variablen sind weder im aufrufenden Layout noch in Sublayouts verfügbar. Bitte beachten Sie, dass ab Version 6.7.1 Variablen auch als Argumente an Layouts übergeben werden können, die mit insertvalue
-template
-Anweisungen inkludiert werden.
Bis Version 6.7.0, oder wenn local
mit dem Wert true
nicht angegeben wurde, sind die Exportvariablen von dem Moment ihrer Erzeugung bis zum Abschluss des Exports der jeweiligen Datei global verfügbar (sofern die Variable nicht zwischenzeitlich mit einer modifyvar
-clear
-Anweisung gelöscht wird). Der Wert einer gesetzten Variablen kann also auch bei einem Kontextwechsel, beispielsweise innerhalb einer NPSOBJ-list- oder NPSOBJ-context
-Anweisung, abgerufen werden.
Die Namen von Export-Variablen haben Vorrang vor anderen Namen (beispielsweise den Namen von Feldern). Legt man also beispielsweise eine Export-Variable mit dem Namen author
an und weist ihr mit
<npsobj modifyvar="set" varname="author">Max Mustermann</npsobj>
die Zeichenkette Max Mustermann
zu, so liefert <npsobj insertvalue="var" name="author" />
stets Max Mustermann
, und zwar auch dann, wenn die aktuell exportierte Datei ein Feld author
mit einem anderen Wert hat. Es ist jedoch möglich, mit dem Präfix self
explizit den Wert eines Feldes zu referenzieren. Analog dazu kann man mit dem Präfix export
ausdrücklich den Wert einer Export-Variablen inkludieren.
Die modifyvar-set
-Anweisung gibt es in den beiden oben aufgeführten Varianten.
Variante 1: Wertzuweisung mittels Tag-Attribut
Bei der ersten Variante wird der Variablen der Wert des Feldes oder der Exportvariablen namens
varValueKey
zugewiesen.
varValueKey
kann (wie beispielsweise
parent.title
) eine Zeichenkette oder eine Liste von Link-
oder Dateikontexten ergeben. Die Namen, die Datei- oder Linkkontexte
ergeben, sind in den Abschnitten
Verfügbare Namen in
einem Kontext vom Typ Datei und
Verfügbare Namen in
einem Kontext vom Typ Link aufgeführt. Die folgende Anweisung setzt
die Variable siblings
auf die Liste der Geschwisterdateien
der aktuellen Datei (und schließt sich selbst dabei ein):
<npsobj modifyvar="set" varname="siblings" name="parent.children" />
An Export-Variablen, die Link- oder Dateikontexte enthalten, können
mit der modifyvar-append
-Anweisung weitere Kontextlisten
angehängt werden (siehe
npsobj_modifyvar_append).
Ferner können die Kontexte in Export-Variablen sortiert werden (siehe
npsobj_modifyvar_sort).
Variante 2: Wertzuweisung über den Inhalt des Elements
Mit der zweiten Variante der modifyvar-set
-Anweisung kann
einer Export-Variablen eine Zeichenkette zugewiesen werden.
NPSOBJ-Elemente in dieser Zeichenkette werden ausgewertet. Dadurch lassen
sich Layouts, in denen dasselbe Konstrukt mehrfach benötigt wird,
effizienter schreiben.
Beachten Sie bitte, dass die modifyvar-set
-Anweisung bei
dieser Verwendungsweise einen neuen Kontext erzeugt. Dieser Kontext
entspricht dem vorausgegangenen Kontext. Möchten Sie einen Kontext oberhalb des
aktuellen Kontexts adressieren, so benötigen Sie einen zusätzlichen
context
-Präfix wie im folgenden Beispiel:
<npsobj list="relatedLinks"> <npsobj modifyvar="set" varname="theLinkListCode"><p> <npsobj list="context.context.linkImage"> <npsobj insertvalue="image" name="destination" /> </npsobj> <npsobj insertvalue="anchor" name="self"> <npsobj insertvalue="var" name="destination.title"/> </npsobj></p> </npsobj> </npsobj>
Um die CMS-Datei zu ermitteln, die einen Link enthält, kann auch die Linkeigenschaft source
abgefragt werden.
Der folgende Code speichert einen Link zum Ordner, der über der aktuellen Datei liegt, in einer Variablen und gibt ihn anschließend aus.
<npsobj modifyvar="set" varname="uplink"> <npsobj insertvalue="anchor" name="parent"> <npsobj insertvalue="var" name="parent.title" /> </npsobj> </npsobj> <npsobj insertvalue="var" name="uplink" />