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

Sections und foreach

Die Funktion section vollständig - Schleifen über Arrays, Zahlen und Zeichenketten, name und der Namensraum, den sie anlegt, var und der Iterator mit last-value, sequence, offset, max, reverse, show mit section-else…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/template-language/sections-vs-foreach.md

On this page

This page is a translation. Read the English original

Sections und foreach

section war die Schleife und die Bedingung der Template-Sprache, bevor foreach, for und if kamen (siehe Geschichte). Sie ist weiterhin registriert, ältere Designs und Erweiterungen nutzen sie überall, und sie kann einige Dinge, die die neueren Funktionen anders lösen. Diese Seite dokumentiert jeden Parameter von eZTemplateSectionFunction (lib/eztemplate/classes/eztemplatesectionfunction.php) und zeigt neben jedem die moderne Entsprechung. Eine kurze Anleitung zum Umstellen bietet Section (veraltet).

Inhalt

  1. Parameter
  2. Schleife, Namensraum und die Schleifenvariablen
  3. Zahlen und Zeichenketten
  4. offset, max, reverse
  5. show und section-else
  6. Filter: section-exclude und section-include
  7. var und last-value
  8. delimiter und modulo
  9. Ein Unterschied in kompilierten Templates
  10. Verwandte Seiten

Parameter

ParameterBedeutungModerne Entsprechung
loopein Array, eine Zahl oder eine Zeichenkette zum Durchlaufenforeach (Arrays), for (Zahlen)
nameder Namensraum für die Schleifenvariablennicht nötig: foreach ... as $item
vareine einzelne Iteratorvariable statt des Namensraumsforeach ... as $key => $item
last-valuemit var: $it.last hält den vorigen Iteratordas vorige Element in einer Variablen behalten
sequenceein durchgewechseltes Array, $Name:sequencesequence <array> as $s
offset, maxüberspringen und begrenzen; ein Array zählt als seine Längeoffset, max von foreach
reverserückwärts durchlaufenreverse
showden Rumpf nur verarbeiten, wenn wahr; ohne loop ist es ein ifif
Kind section-elsewas gezeigt wird, wenn show falsch istelse
Kind section-exclude match=...Elemente verwerfen, für die match wahr ist{if ...}{skip}{/if}
Kind section-include match=...Elemente wieder aufnehmenein if um den Rumpf
Kind delimiter [modulo=n] [match=...]Text zwischen den Durchläufendelimiter der Schleife

Schleife, Namensraum und die Schleifenvariablen

Mit name=Loop setzt jeder Durchlauf item, key, index (ab 0), number (ab 1) und, mit einer sequence, sequence im Namensraum Loop, gelesen als $Loop:item oder, innerhalb der Section, $:item (siehe Namensräume). Ohne Namen landen sie im aktuellen Namensraum als $item, $key und so weiter und werden nach der Schleife entfernt.

{section name=Loop loop=array( 'a', 'b', 'c' ) sequence=array( 'odd', 'even' )}[{$Loop:item}/{$Loop:key}/{$Loop:index}/{$Loop:number}/{$Loop:sequence}]{delimiter},{/delimiter}{/section}

Ausgabe:

[a/0/0/1/odd],[b/1/1/2/even],[c/2/2/3/odd]

Dasselbe mit foreach:

{foreach array( 'a', 'b', 'c' ) as $key => $item sequence array( 'odd', 'even' ) as $seq}[{$item}/{$key}/{$key}/{$key|inc}/{$seq}]{delimiter},{/delimiter}{/foreach}

Ausgabe:

[a/0/0/1/odd],[b/1/1/2/even],[c/2/2/3/odd]

Zahlen und Zeichenketten

loop nimmt auch eine Zahl, wobei item von 1 bis n läuft (oder von -1 bis -n bei einer negativen Zahl), und eine Zeichenkette, deren Zeichen durchlaufen werden. foreach kann beides nicht: Nutzen Sie for, oder teilen Sie die Zeichenkette mit str_split:

[{section loop=3}{$item}{/section}] [{section loop=-3}{$item}{/section}] [{section loop='abc' reverse=true()}{$item}{/section}]
[{for 1 to 3 as $i}{$i}{/for}] [{foreach 'abc'|str_split|reverse as $c}{$c}{/foreach}]

Ausgabe:

[123] [-1-2-3] [cba]
[123] [cba]

offset, max, reverse

offset verwirft die ersten n Elemente, und max hört nach n verarbeiteten Elementen auf (ein an eines von beiden übergebenes Array zählt als seine Länge; ein negativer Offset wird mit einer Warnung auf 0 zurückgesetzt). Mit reverse werden die Schlüssel umgekehrt, bevor der Offset angewendet wird:

[{section name=S loop=array( 1, 2, 3, 4, 5, 6 ) offset=1 max=3}{$S:item}{/section}]
[{foreach array( 1, 2, 3, 4, 5, 6 ) as $v offset 1 max 3}{$v}{/foreach}]
[{section name=R loop=array( 1, 2, 3 ) reverse=true()}{$R:item}{/section}] [{foreach array( 1, 2, 3 ) as $v reverse}{$v}{/foreach}]

Ausgabe:

[234]
[234]
[321] [321]

show und section-else

show entscheidet, ob der Rumpf überhaupt läuft. Es ist falsch bei false(), 0, einer leeren Zeichenkette und einem leeren Array. Die Kinder nach {section-else} laufen dann stattdessen. Ohne loop ist section show=... einfach eine Bedingung:

{def $results = array()}
[{section show=$results|count}results{section-else}nothing found{/section}]
[{if $results|count}results{else}nothing found{/if}]

Ausgabe:

[nothing found]
[nothing found]
{def $user = hash( 'name', 'Ada' )}
[{section show=$user.name}Hello {$user.name}{/section}]

Ausgabe:

[Hello Ada]

section-else gehört zu show: Ein leeres loop ohne show gibt überhaupt nichts aus, auch nicht den else-Teil:

[{section loop=array()}x{section-else}else part{/section}]
[{section loop=array() show=array()}x{section-else}else part{/section}]

Ausgabe:

[]
[else part]

Filter: section-exclude und section-include

Filter-Tags werden für jedes Element im Namensraum der Section ausgewertet, der Reihe nach. Ein exclude, dessen match wahr ist, entfernt das Element, ein include, dessen match wahr ist, nimmt es wieder auf; der letzte passende Filter entscheidet. Ein ausgeschlossenes Element zählt nicht für max und bekommt keinen Delimiter. Die Form mit foreach nutzt {skip}:

[{section name=F loop=array( 1, 2, 3, 4, 5, 6 )}{section-exclude match=$:item|mod( 2 )|eq( 0 )}{$F:item}{/section}]
[{section name=G loop=array( 1, 2, 3, 4, 5, 6 )}{section-exclude match=true()}{section-include match=$:item|gt( 4 )}{$G:item}{/section}]
[{foreach array( 1, 2, 3, 4, 5, 6 ) as $v}{if $v|mod( 2 )|eq( 0 )}{skip}{/if}{$v}{/foreach}]

Ausgabe:

[135]
[56]
[135]

var und last-value

var=it gibt statt eines Namensraums ein einzelnes Iterator-Objekt (eZTemplateSectionIterator). Ausgegeben ist es das aktuelle Element; seine Attribute sind item, key, index, number, sequence und die eigenen Attribute des Elements. Mit last-value=true() hält das Attribut last den Iterator des vorigen Durchlaufs:

[{section var=it loop=array( 'a', 'b', 'c' ) last-value=true()}{$it}{if $it.last} (after {$it.last}){/if}; {/section}]
[{section var=it loop=array( 'a', 'b' )}{$it.item}/{$it.key}/{$it.index}/{$it.number} {/section}]

Ausgabe:

[a; b (after a); c (after b); ]
[a/0/0/1 b/1/1/2 ]

delimiter und modulo

Wie bei den neueren Schleifen wird delimiter zwischen verarbeiteten Elementen ausgegeben, und modulo=n beschränkt ihn auf jedes n-te. Ein Delimiter von section akzeptiert außerdem match=<condition>:

[{section name=D loop=array( 1, 2, 3, 4 )}{delimiter modulo=2}|{/delimiter}{$D:item}{/section}]
[{foreach array( 1, 2, 3, 4 ) as $v}{$v}{delimiter modulo=2}|{/delimiter}{/foreach}]

Ausgabe:

[12|34]
[12|34]

Ein Unterschied in kompilierten Templates

Jedes Beispiel auf dieser Seite wurde auch durch den Template-Compiler gerendert. Eines ergibt ein anderes Ergebnis: eine umgekehrte Schleife über eine Zeichenkette. Interpretiert gibt {section loop='abc' reverse=true()} den Text cba aus; kompiliert gibt es nur c aus, während die Form mit foreach auf beide Arten cba ergibt:

[{section loop=3}{$item}{/section}] [{section loop=-3}{$item}{/section}] [{section loop='abc' reverse=true()}{$item}{/section}]
[{for 1 to 3 as $i}{$i}{/for}] [{foreach 'abc'|str_split|reverse as $c}{$c}{/foreach}]

Ausgabe:

[123] [-1-2-3] [cba]
[123] [cba]

Ausgabe mit dem Template-Compiler (in einen Arbeitsordner kompiliert):

[123] [-1-2-3] [c]
[123] [cba]

Live-Websites kompilieren ihre Templates (site.ini [TemplateSettings] standardmäßig TemplateCompile=enabled); stellen Sie eine solche Schleife also auf foreach mit str_split|reverse um.

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