Arithmetische Operatoren
Die Template-Sprache kennt keine Infix-Arithmetik: {1 + 2} ist kein Ausdruck. Jede Berechnung ist ein
Operatoraufruf. Alle 18 arithmetischen Operatoren registriert eZTemplateArithmeticOperator
(lib/eztemplate/classes/eztemplatearithmeticoperator.php) über lib/eztemplate/classes/eztemplateautoload.php.
Die meisten nehmen ihre Operanden entweder aus der Eingabe über die Pipe (10|sum( 5 )) oder aus den Parametern
(sum( 10, 5 )). Wo sich ein Operator anders verhält, sagt es sein Abschnitt. Die Beispiele wurden auf einer Entwicklungsinstallation vom
Template-Interpreter und anschließend noch einmal vom Template-Compiler ausgegeben; die kompilierte Form von sum,
sub, mul und div ruft dasselbe eZTemplateArithmeticOperator::calculate() auf. Der einzige gefundene
Unterschied, bei min, steht in dessen Abschnitt.
Inhalt
- Wie Operanden gelesen werden
- sum und sub
- mul, div und mod
- inc und dec
- min und max
- abs, ceil, floor, round, int und float
- count
- roman und rand
- Ein durchgerechnetes Beispiel: die Anzahl der Seiten
- Verwandte Seiten
Wie Operanden gelesen werden
sum, sub, mul und div machen mit eZTemplateArithmeticOperator::numericOperand() aus jedem Operanden eine
Zahl: Ganzzahlen und Gleitkommazahlen bleiben, wie sie sind, eine numerische Zeichenkette wird zu ihrer Zahl, eine
Zeichenkette, die mit einer Zahl beginnt, wird zu dieser Zahl ('7 days' ist 7), jede andere Zeichenkette und null
werden zu 0, ein boolescher Wert wird zu 0 oder 1, ein Array wird zu 0, wenn es leer ist, sonst zu 1, und ein Objekt
wird zu 0. Nur diese vier Operatoren verwenden diese Regel; die anderen nutzen die Umwandlung von PHP selbst.
sum und sub
sum
Addiert alle Operanden: die Eingabe über die Pipe (wenn vorhanden) und jeden Parameter.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
| beliebig viele Werte | Zahl oder numerische Zeichenkette | nein | keiner |
Eingabe: optional; wenn vorhanden, ist sie der erste Operand. Gibt eine Ganzzahl oder eine Gleitkommazahl zurück. Erzeugte Referenz: sum.
sub
Zieht jeden folgenden Operanden vom ersten ab. Der erste Operand ist die Eingabe über die Pipe oder, wenn nichts übergeben wird, der erste Parameter.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
| beliebig viele Werte | Zahl oder numerische Zeichenkette | nein | keiner |
Eingabe: optional. Gibt eine Ganzzahl oder eine Gleitkommazahl zurück. Erzeugte Referenz: sub.
sum( 2, 3, 4 ) = sum( 2, 3, 4 )
10|sum( 5 ) = {10|sum( 5 )}
sub( 10, 3, 2 ) = sub( 10, 3, 2 )
'7 days'|sum( 1 ) = '7 days'|sum( 1 )
sum( 'abc', 2 ) = sum( 'abc', 2 )Ausgabe:
sum( 2, 3, 4 ) = 9
10|sum( 5 ) = 15
sub( 10, 3, 2 ) = 5
'7 days'|sum( 1 ) = 8
sum( 'abc', 2 ) = 2mul, div und mod
mul
Multipliziert die Eingabe (wenn vorhanden) mit jedem Parameter. Ganz ohne Parameter protokolliert er die Warnung "Requires at least 1 parameter value" und lässt den Wert unverändert.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
| Werte | Zahl | ja, mindestens einer | keiner |
Eingabe: optional. Gibt eine Ganzzahl oder eine Gleitkommazahl zurück. Erzeugte Referenz: mul.
div
Teilt den ersten Operanden der Reihe nach durch jeden folgenden. Eine Division durch null ergibt 0 statt eines
Fehlers. Braucht wie mul mindestens einen Parameter.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
| Werte | Zahl | ja, mindestens einer | keiner |
Eingabe: optional; wenn vorhanden, ist sie der Dividend. Gibt eine Ganzzahl oder eine Gleitkommazahl zurück. Erzeugte Referenz: div.
mod
Der Rest einer ganzzahligen Division (PHP %). Mit einem Parameter ist die Eingabe der Dividend und der Parameter
der Divisor; mit zwei Parametern sind diese Dividend und Divisor, und die Eingabe wird ignoriert. Ohne Parameter
protokolliert er "Missing dividend and divisor". Es gibt keine Prüfung auf null: Prüfen Sie den Divisor vorher.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
| Dividend oder Divisor | Ganzzahl | ja | keiner |
| Divisor | Ganzzahl | nein | keiner |
Gibt eine Ganzzahl zurück. Erzeugte Referenz: mod.
mul( 4, 2.5 ) = mul( 4, 2.5 )
div( 10, 4 ) = div( 10, 4 )
div( 10, 0 ) = div( 10, 0 )
100|div( 2, 5 ) = {100|div( 2, 5 )}
mod( 10, 4 ) = mod( 10, 4 )
10|mod( 3 ) = {10|mod( 3 )}Ausgabe:
mul( 4, 2.5 ) = 10
div( 10, 4 ) = 2.5
div( 10, 0 ) = 0
100|div( 2, 5 ) = 10
mod( 10, 4 ) = 2
10|mod( 3 ) = 1inc und dec
inc
Gibt den Wert plus eins zurück: die Eingabe über die Pipe oder, wenn nichts übergeben wird, den benannten Parameter
value. Die Variable selbst wird nicht geändert; verwenden Sie {set $i = $i|inc}, um das Ergebnis zu speichern.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
value | beliebig | nein | false |
Erzeugte Referenz: inc.
dec
Dasselbe, minus eins.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
value | beliebig | nein | false |
Erzeugte Referenz: dec.
def $i = 5
$i|inc = $i|inc, $i|dec = $i|dec, $i is still $i
inc( 9 ) = inc( 9 )
dec( 1 ) = dec( 1 )Ausgabe:
$i|inc = 6, $i|dec = 4, $i is still 5
inc( 9 ) = 10
dec( 1 ) = 0min und max
max
Gibt den größten Wert zurück. Die Eingabe über die Pipe nimmt, wenn vorhanden, am Vergleich teil; sonst beginnt der erste Parameter. Braucht mindestens einen Parameter.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
| Werte | beliebig | ja, mindestens einer | keiner |
Erzeugte Referenz: max.
min
Gibt den kleinsten Wert zurück. Braucht mindestens einen Parameter. Verwenden Sie ihn in der Aufrufform,
min( $a, $b ): Mit einer Eingabe über die Pipe sind sich Interpreter und kompiliertes Template nicht einig. Der
Interpreter (modify()) vergleicht nur die Parameter, daher ist 7|min( 9, 8 ) dort 8; das kompilierte Template
bezieht die Eingabe ein und liefert 7.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
| Werte | beliebig | ja, mindestens einer | keiner |
Erzeugte Referenz: min.
max( 3, 9, 4 ) = max( 3, 9, 4 )
min( 3, 9, 4 ) = min( 3, 9, 4 )
7|max( 3, 5 ) = {7|max( 3, 5 )}
7|min( 9, 8 ) = {7|min( 9, 8 )}Ausgabe:
max( 3, 9, 4 ) = 9
min( 3, 9, 4 ) = 3
7|max( 3, 5 ) = 7
7|min( 9, 8 ) = 8Dasselbe Template, auf einer Entwicklungsinstallation kompiliert (das Kompilieren von Templates ist in site.ini eingeschaltet,
[TemplateSettings] TemplateCompile), gab in der letzten Zeile 7|min( 9, 8 ) = 7 aus; die anderen Zeilen waren
gleich:
Ausgabe mit dem Template-Compiler (in einen Arbeitsordner kompiliert):
max( 3, 9, 4 ) = 9
min( 3, 9, 4 ) = 3
7|max( 3, 5 ) = 7
7|min( 9, 8 ) = 7abs, ceil, floor, round, int und float
Jeder nimmt einen Wert: den ersten Parameter, wenn es einen gibt, sonst die Eingabe über die Pipe.
| Operator | Tut | Gibt zurück |
|---|---|---|
abs | PHP abs() | Zahl |
ceil | PHP ceil(), rundet auf | Gleitkommazahl |
floor | PHP floor(), rundet ab | Gleitkommazahl |
round | PHP round() ohne Genauigkeit: auf eine ganze Zahl, Hälften von null weg | Gleitkommazahl |
int | PHP-Umwandlung (int): '42abc' ist 42, 9.99 ist 9 | Ganzzahl |
float | PHP-Umwandlung (float) | Gleitkommazahl |
Keiner von ihnen hat benannte Parameter. round hat keinen Parameter für die Genauigkeit; für zwei Nachkommastellen
verwenden Sie mul( $x, 100 )|round|div( 100 ) oder die Locale-Operatoren (l10n( 'number' )).
Erzeugte Referenzen: abs, ceil,
floor, round,
int, float.
-4.6|abs = {-4.6|abs}
4.2|ceil = {4.2|ceil}
4.8|floor = {4.8|floor}
4.5|round = {4.5|round}
round( 2.4 ) = round( 2.4 )
'42abc'|int = '42abc'|int
'3.75'|float = '3.75'|float
int( 9.99 ) = int( 9.99 )Ausgabe:
-4.6|abs = 4.6
4.2|ceil = 5
4.8|floor = 4
4.5|round = 5
round( 2.4 ) = 2
'42abc'|int = 42
'3.75'|float = 3.75
int( 9.99 ) = 9count
count
Zählt den ersten Parameter oder, wenn es keinen Parameter gibt, die Eingabe über die Pipe:
- ein Array: die Anzahl seiner Elemente;
- ein Objekt mit einer Methode
attributes()(Knoten, Inhaltsobjekte, Attribute): die Anzahl der Attributnamen, die es Templates anbietet; - eine Zeichenkette: ihre Länge in Bytes (
strlen), ein Multibyte-Zeichen zählt also mehr als einmal; - alles andere: 0.
Ein zweiter Parameter protokolliert eine Warnung über "extra parameters".
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
| Wert | beliebig | nein | die Eingabe |
Erzeugte Referenz: count.
def $node = fetch( 'content', 'node', hash( 'node_id', 89 ) )
array( 1, 2, 3 )|count = array( 1, 2, 3 )|count
'Hello'|count = 'Hello'|count
count( hash( 'a', 1, 'b', 2 ) ) = count( hash( 'a', 1, 'b', 2 ) )
$node.object.data_map|count = $node.object.data_map|count
$node|count (attributes of the node object) = $node|count
42|count = {42|count}Ausgabe:
array( 1, 2, 3 )|count = 3
'Hello'|count = 5
count( hash( 'a', 1, 'b', 2 ) ) = 2
$node.object.data_map|count = 7
$node|count (attributes of the node object) = 50
42|count = 0roman und rand
roman
Schreibt eine positive Ganzzahl als römische Zahl, erzeugt von buildRoman(). Der Wert ist der benannte Parameter
value oder die Eingabe über die Pipe. Null und negative Zahlen ergeben eine leere Zeichenkette.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
value | beliebig | nein | false (die Eingabe verwenden) |
Erzeugte Referenz: roman.
rand
Mit zwei Parametern eine zufällige Ganzzahl zwischen beiden, einschließlich (PHP mt_rand( min, max )); mit jeder
anderen Anzahl von Parametern mt_rand() ohne Grenzen. In einem Cache-Block oder einem Template mit Ansichtscache
bleibt der Wert gleich, bis der Cache neu aufgebaut wird.
| Parameter | Typ | Pflicht | Standard |
|---|---|---|---|
| Minimum | Ganzzahl | nein | keiner |
| Maximum | Ganzzahl | nein | keiner |
Erzeugte Referenz: rand.
def $r = rand( 1, 6 )
4|roman = {4|roman}
roman( 1999 ) = roman( 1999 )
2026|roman = {2026|roman}
rand( 1, 6 ) is between 1 and 6: and( $r|ge( 1 ), $r|le( 6 ) )|choose( 'no', 'yes' )Ausgabe:
4|roman = IV
roman( 1999 ) = MCMXCIX
2026|roman = MMXXVI
rand( 1, 6 ) is between 1 and 6: yesEin durchgerechnetes Beispiel: die Anzahl der Seiten
Die Kategorie Recipes auf einer Entwicklungsinstallation (Knoten 144), vier Einträge pro Seite:
{def $total = fetch( 'content', 'list_count', hash( 'parent_node_id', 144 ) )
$limit = 4
$pages = ceil( div( $total, $limit ) )}
$total items under Recipes, $limit per page: $pages pagesAusgabe:
18 items under Recipes, 4 per page: 5 pagesVerwandte Seiten
- Mathematische Operatoren: der Überblick für Designer, mit Rezepten für Seitenumbruch und Raster
- Logische Operatoren, um die Ergebnisse zu vergleichen
- Seitenumbruch
- Alle Template-Operatoren (erzeugt)
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
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.