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

Namensräume

Wie die Template-Engine Variablen auseinanderhält - der Wurzel- und der aktuelle Namensraum, die vier Arten, eine Variable zu benennen ($var, $ns:var, $:var, $#var), was include mit und ohne name= tut, die Namensräume…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/template-language/namespaces.md

On this page

This page is a translation. Read the English original

Namensräume

Jede Template-Variable lebt in einem Namensraum, einem Namen wie '' (die oberste Ebene der Seite), box oder Outer:Inner. Die Engine speichert Variablen als $this->Variables[<namespace>][<name>] (lib/eztemplate/classes/eztemplate.php), und jedes Template wird mit zwei Namensräumen zur Hand verarbeitet: dem Wurzel-Namensraum der Datei und dem aktuellen Namensraum, den ein section oder let mit einem Namen innerhalb der Datei ändern kann. Namensräume sorgen dafür, dass die Variablen eingebundener Templates und verschachtelter Schleifen einander nicht überschreiben.

Inhalt

  1. Vier Arten, eine Variable zu benennen
  2. include ohne und mit Namen
  3. Namensräume von section und let
  4. Eine Variable im falschen Namensraum
  5. Regeln für die Praxis
  6. Verwandte Seiten

Vier Arten, eine Variable zu benennen

Der Variablenparser (variableEndPos() in lib/eztemplate/classes/eztemplateelementparser.php) liest ein wahlweise vorhandenes Zeichen für den Gültigkeitsbereich, beliebig viele Präfixe name: und den Variablennamen. elementValue() in eztemplate.php findet dann den Namensraum:

GeschriebenGültigkeitsbereichDurchsuchter Namensraum
$titlelokalder Wurzel-Namensraum der Datei
$box:titlelokalWurzel-Namensraum + :box (oder box ganz oben)
$:titlerelativder aktuelle Namensraum
$#titleglobalgenau der geschriebene Namensraum, hier '', die oberste Ebene der Seite
$#box:titleglobalgenau box

Auf der obersten Ebene einer Seite sind all das derselbe Namensraum ''. Sie unterscheiden sich in eingebundenen Templates, Sections und let-Blöcken.

include ohne und mit Namen

eZTemplateIncludeFunction::process() entscheidet über den Namensraum der eingebundenen Datei:

  • Ohne name läuft die Datei im aktuellen Namensraum des Aufrufers. Sie sieht jede Variable des Aufrufers, und die Parameter, die sie bekommt, werden für die Dauer des include in diesem Namensraum gesetzt.
  • Mit name='box' läuft die Datei im Namensraum box (oder <current>:box). Ihr $title bedeutet box:title, sie sieht also nur ihre Parameter; die Variablen des Aufrufers bleiben mit $#name erreichbar.

Diese Datei wird unten zweimal eingebunden:

title=[{$title}] local=[{if is_set( $node )}{$node.name}{else}no $node{/if}] global=[{$#node.name}] relative=[{$:title}]

Ohne Namen sieht sie $node des Aufrufers:

{def $node = fetch( 'content', 'node', hash( 'node_id', 89 ) )}
{include uri='file:var/tmp/examples/tl-ns/parts/show.tpl' title='A'}

Ausgabe:

title=[A] local=[Fit & Healthy] global=[Fit & Healthy] relative=[A]

Mit name='box' fehlt das lokale $node, das globale $#node.name funktioniert weiterhin, und der Parameter $title wird nach dem include wieder entfernt:

{def $node = fetch( 'content', 'node', hash( 'node_id', 89 ) )}
{include uri='file:var/tmp/examples/tl-ns/parts/show.tpl' title='B' name='box'}
after: [{if is_set( $title )}title leaked{else}no $title here{/if}]

Ausgabe:

title=[B] local=[no $node] global=[Fit & Healthy] relative=[B]
after: [no $title here]

Beide Formen kommen in ausgelieferten Designs vor. Ohne Namen ist bequem, bindet den Teil aber an seine Aufrufer; ein Name macht den Teil eigenständig.

Namensräume von section und let

section mit name= verarbeitet seinen Rumpf im Namensraum <current>:<name> und setzt dort item, key, index, number (und sequence) (eZTemplateSectionFunction::process()). Verschachtelte Sections verschachteln die Namen, und $:item meint immer die innerste:

{section name=Outer loop=array( 'x', 'y' )}{section name=Inner loop=array( 1, 2 )}[{$Outer:item}{$Outer:Inner:item}|{$:item}]{/section}{/section}

Ausgabe:

[x1|1][x2|2][y1|1][y2|2]

let und default mit name= tun dasselbe für ihre Variablen:

{let name=Box width=3}[{$Box:width}] [{$:width}]{/let}

Ausgabe:

[3] [3]

foreach, for, while und def legen keine Namensräume an; ihre Variablen sind gewöhnliche Variablen der Datei.

Eine Variable im falschen Namensraum

Ein fehlgeschlagener Zugriff nennt den durchsuchten Namensraum; daran sehen Sie, ob die Variable fehlt oder nur außer Reichweite ist:

{def $title = 'root'}
[{$Box:title}]

Ausgabe:

[]

Von der Template-Engine protokolliert:

ERROR : Unknown template variable 'title' in namespace 'Box'

Regeln für die Praxis

  • Nutzen Sie in neuen Templates def und foreach; sie brauchen überhaupt keine Namensräume.
  • Geben Sie einem wiederverwendbaren Teil beim Einbinden einen name, und übergeben Sie alles, was er braucht, als Parameter.
  • Greifen Sie zu $#var nur, um seitenweite Werte aus einem benannten Teil heraus zu lesen; um Werte nach oben zu geben, siehe set mit einem Gültigkeitsbereich.
  • Beim Lesen alter Templates ist $Name:item ein Namensraum von section oder let: siehe Sections und foreach.

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