Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Variablen im Detail

Die genauen Regeln von def, undef, set, let und default aus eZTemplateDefFunction und eZTemplateSetFunction - die Warnungen bei doppelter Definition, beim Setzen einer unbekannten Variablen und beim Aufheben einer, die…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/template-language/variables-in-depth.md

On this page

This page is a translation. Read the English original

Variablen im Detail

Variablen und def zeigt, wie Sie Variablen nutzen. Diese Seite gibt die genauen Regeln, gelesen aus lib/eztemplate/classes/eztemplatedeffunction.php und lib/eztemplate/classes/eztemplatesetfunction.php, und zeigt jeden Fall auf einer Entwicklungsinstallation, einschließlich der Warnungen, die die Engine schreibt.

Inhalt

  1. Die fünf Funktionen
  2. def, set, undef
  3. def auf eine vorhandene Variable
  4. set auf eine nicht vorhandene Variable
  5. undef mit und ohne Namen
  6. let und default: Variablen für einen Block
  7. Lebensdauer: Eine Variable gehört zu ihrer Datei
  8. set mit einem Gültigkeitsbereich
  9. Verwandte Seiten

Die fünf Funktionen

FunktionKlasseLegt anÄndertHinweise
defeZTemplateDefFunctionjanur mit einer Warnungdie Variable lebt bis zum Ende der Datei oder bis undef
undefeZTemplateDefFunctionentferntnur mit def angelegte Variablen; ohne Namen: alle
seteZTemplateSetFunctionnein, warntjanimmt scope und name
leteZTemplateSetFunctionja, für seinen Blockentfernt bei {/let}, was es angelegt hat
defaulteZTemplateSetFunctionnur wenn fehlend, für seinen Blockbehält einen vorhandenen Wert

Das Dollarzeichen vor einem Namen ist bei allen wahlweise ({def x=1} funktioniert); der Parser überspringt es.

def, set, undef

Mehrere Variablen lassen sich in einem Tag behandeln:

{def $count = 1 $label = 'items'}
[{$count} {$label}]
{set $count = $count|inc $label = 'things'}
[{$count} {$label}]
{undef $label}
[{if is_set( $label )}label still set{else}label removed{/if}] [{$count}]

Ausgabe:

[1 items][2 things][label removed] [2]

def auf eine vorhandene Variable

process() prüft zuerst hasVariable(). Existiert die Variable, schreibt es die Warnung Variable '...' is already defined. und weist den neuen Wert trotzdem zu:

{def $color = 'red'}
{def $color = 'blue'}
[{$color}]

Ausgabe:

[blue]

Von der Template-Engine protokolliert:

WARNING def: Variable 'color' is already defined.

Ein wiederholtes {def} ist also nicht fatal, aber die Warnung bedeutet, dass das Template zwei Definitionen hat, wo es eine wollte, oder dass eine Variable aus einem einbindenden Template hereinsickert.

set auf eine nicht vorhandene Variable

set ändert nur vorhandene Variablen. Bei einem unbekannten Namen schreibt es Variable '...' doesn't exist, cannot set und tut nichts:

{set $size = 'large'}
[{if is_set( $size )}size exists{else}size was not created{/if}]

Ausgabe:

[size was not created]

Von der Template-Engine protokolliert:

WARNING set: Variable 'size' doesn't exist, cannot set

undef mit und ohne Namen

{undef $a $b} entfernt die genannten Variablen, aber nur die, die in der aktuellen Datei mit {def} angelegt wurden (hasLocalVariable()); bei jedem anderen Namen warnt es Variable '...' is not defined with {def}. und lässt sie stehen. Seit der im Changelog vermerkten Korrektur in 3.8 kann undef keine Variablen entfernen, die es nicht angelegt hat. Ohne Namen entfernt {undef} jede Variable, die die aktuelle Datei mit def definiert hat (unsetLocalVariables()):

{def $a = 1 $b = 2 $c = 3}
{undef}
[{if is_set( $a )}a{/if}{if is_set( $b )}b{/if}{if is_set( $c )}c{/if}] all removed

Ausgabe:

[] all removed
{undef $never_defined}
done

Ausgabe:

done

Von der Template-Engine protokolliert:

WARNING undef: Variable 'never_defined' is not defined with {def}.

let und default: Variablen für einen Block

let und default sind Block-Funktionen (hasChildren() gibt für sie true zurück). Sie definieren ihre Variablen, verarbeiten die Kinder und entfernen dann nur, was sie definiert haben (cleanupVariables()). default definiert eine Variable nur, wenn sie fehlt, was es zum klassischen Weg machte, einem eingebundenen Template wahlweise Parameter zu geben; first_set tut dasselbe in einem Ausdruck.

{let greeting='hi'}inside let: [{$greeting}]{/let}
after let: [{if is_set( $greeting )}still set{else}gone{/if}]
{def $size = 'given'}
{default size='fallback' color='fallback'}[{$size}] [{$color}]{/default}

Ausgabe:

inside let: [hi]after let: [gone][given] [fallback]

Lebensdauer: Eine Variable gehört zu ihrer Datei

Jede Template-Datei öffnet ihre eigene Liste lokaler Variablen (createLocalVariablesList()), und wenn die Datei endet, werden die Variablen, die sie mit def angelegt hat, entfernt. Eine in einem eingebundenen Template definierte Variable ist nach dem {include} also verschwunden:

{def $inner = 'made in the part'}
part: [{$inner}]
{include uri='file:var/tmp/examples/tl-vars/parts/maker.tpl'}
after: [{if is_set( $inner )}inner visible{else}inner gone after the include{/if}]

Ausgabe:

part: [made in the part]
after: [inner gone after the include]

An {include} übergebene Parameter werden gesetzt, bevor die Datei läuft, und danach entfernt (oder auf ihren alten Wert zurückgesetzt), von eZTemplateIncludeFunction::process().

set mit einem Gültigkeitsbereich

set (sowie let und default) akzeptieren scope=relative, scope=root oder scope=global und name=, um einen Namensraum zu wählen. Ohne Dollarzeichen geschrieben, sind scope und name keine Variablen, sondern diese beiden Optionen (der Parser benennt sie in -scope und -name um).

GültigkeitsbereichGenutzter NamensraumTypischer Einsatz
relative (Standard)der aktuelle Namensraumgewöhnliche Zuweisung
rootder Wurzel-Namensraum der aktuellen Template-Dateieinen Wert der Datei aus einem section oder let heraus ändern
globalder leere Namensraum, die oberste Ebene der Seiteeinen Wert aus einem mit name= eingebundenen Template zurückgeben

Die eingebundene Datei unten läuft in ihrem eigenen Namensraum (name='part'), sieht also $total des Aufrufers nicht, aber set scope=global ändert die Variable des Aufrufers:

{def $inner = 'made in the part'}
part sees: [{if is_set( $total )}{$total}{else}no $total{/if}]
{set scope=global total=10}
{def $total = 1}
{include uri='file:var/tmp/examples/tl-vars/parts/counter.tpl' name='part'}
after include: [{$total}] [{if is_set( $inner )}inner visible{else}inner not visible{/if}]

Ausgabe:

part sees: [no $total]after include: [10] [inner not visible]

Setzen Sie das sparsam ein: Ein Template, das die Variablen seines Aufrufers ändert, ist schwer nachzuvollziehen. Um Werte an das Pagelayout zu übergeben, gibt es die persistente Variable (Die persistente Variable).

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x