Smarty und die Template-Sprache nebeneinander
Wenn Sie Smarty kennen, können Sie die meisten Templates von Exponential sofort lesen: Die geschweiften Klammern, das $, die Pipe und die
Block-Tags folgen derselben Idee. Die Einzelheiten unterscheiden sich, und an den Einzelheiten scheitert ein Template. Diese Seite stellt beide
nebeneinander. Die Spalte zu Smarty dient nur dem Vergleich und wurde hier nicht ausgeführt; jedes Beispiel der Template-Sprache wurde auf
einer Entwicklungsinstallation gerendert.
Exponential führt Smarty-Templates selbst aus: Ein Design kann Smarty-5-Templates (
.stpl) neben seinen.tpl-Templates enthalten, mit jedem Operator, jeder Fetch-Funktion, jeder Template-Funktion, jeder Override-Regel und jedem Cache des Template-Systems. Wenn Sie lieber weiter Smarty schreiben, lesen Sie Von .tpl zu .stpl umziehen und (Englisch) Smarty templates (.stpl) next to .tpl; die Konverter wandeln auch in beide Richtungen um.
Exponential führt Smarty-Templates selbst aus: Ein Design kann Smarty-5-Templates (
.stpl) neben seinen.tpl-Templates enthalten, mit jedem Operator, jeder Fetch-Funktion, jeder Template-Funktion, jeder Override-Regel und jedem Cache des Template-Systems. Wenn Sie lieber weiter Smarty schreiben, lesen Sie Von .tpl zu .stpl umziehen und (Englisch) Smarty templates (.stpl) next to .tpl; die Konverter wandeln auch in beide Richtungen um.
Inhalt
- Die Tabelle
- Ausgabe und Modifikatoren
- Zuweisung und Standardwerte
- Bedingungen und Schleifen
- Include, literal, Begrenzer und Kommentare
- Capture
- Daten und Anzahlen
- Verwandte Seiten
Die Tabelle
| Aufgabe | Smarty, zum Vergleich (hier nicht ausgeführt) | Template-Sprache |
|---|---|---|
| Eine Variable ausgeben | {$title} | {$title} |
| Array-Schlüssel / Objekteigenschaft | {$user.name}, {$user->name} | {$user.name} für beides (siehe Zugriff auf Attribute) |
| Modifikator / Operator | {$title|upper} | {$title|upcase} |
| Modifikator mit Argumenten | {$title|truncate:16} | {$title|shorten( 16 )} |
| Verkettung | {$title|trim|upper} | {$title|trim|upcase} |
| Aufruf in Funktionsform | {counter}, Plugins | {sum( 1, 2 )}: Jeder Operator lässt sich auch aufrufen |
| Arithmetik | {$a + 1} | {$a|sum( 1 )} oder {sum( $a, 1 )}: keine Operatoren in Infixschreibweise |
| Vergleich | {if $a > 1} | {if $a|gt( 1 )} |
| Logik | {if $a && !$b} | {if and( $a, not( $b ) )} |
| Zuweisung | {assign var=x value=1}, {$x = 1} | {def $x = 1} zum Anlegen, {set $x = 2} zum Ändern |
| Standardwert | {$nick|default:'none'} | {first_set( $nick, 'none' )} |
| Ternärer Ausdruck | {($a) ? 'y' : 'n'} | {cond( $a, 'y', 'n' )} |
| If | {if}{elseif}{else}{/if} | {if}{elseif}{else}{/if} |
| Schleife mit Schlüssel | {foreach $arr as $k => $v} | {foreach $arr as $k => $v} |
| Schleife über nichts | {foreachelse} | vorher prüfen: {if $arr|count} |
| Abwechselnde Zeilenklassen | {cycle values="odd,even"} | sequence array( 'odd', 'even' ) as $row an der Schleife |
| Zahlenbereich | {for $i=1 to 3} | {for 1 to 3 as $i} |
| Include | {include file='part.tpl' who='a'} | {include uri='design:part.tpl' who='a'} |
| Wörtlicher Text mit Klammern | {literal}...{/literal} | {literal}...{/literal} |
| Eine einzelne Klammer | {ldelim}, {rdelim} | {ldelim}, {rdelim} |
| Kommentar | {* ... *} | {* ... *} |
| Ausgabe auffangen | {capture name=x}...{/capture} | {set-block variable=x}...{/set-block} |
| Für HTML maskieren | {$s|escape} (oder automatische Maskierung, wenn eingeschaltet) | {$s|wash}: nie automatisch |
| Ein Datum formatieren | {$t|date_format:'%Y-%m-%d'} | {$t|datetime( 'custom', '%Y-%m-%d' )} |
| Anzahl | {$arr|count} | {$arr|count} |
| Rohes PHP | {php} | keines: Logik gehört in eine Operatorklasse |
| Einen Teil der Seite cachen | {nocache}, Caching pro Template | {cache-block keys=...}...{/cache-block} |
| Ein Layout wiederverwenden | {extends} und {block} | das Pagelayout plus Overrides; $module_result.content ist der Rumpf der Seite |
Ausgabe und Modifikatoren
Operatoren treten an die Stelle von Modifikatoren. Sie werden mit Klammern und durch Kommas getrennten Argumenten aufgerufen, nicht mit Doppelpunkten:
def $title = ' The Exponential template language '
[$title]
[$title|trim|upcase]
[$title|trim|shorten( 16 )]
[$title|trim|count_chars]
['<b>bold</b> & more'|wash]Ausgabe:
[ The Exponential template language ]
[THE EXPONENTIAL TEMPLATE LANGUAGE]
[The Exponenti...]
[33]
[<b>bold</b> & more]shorten( 16 ) zählt die drei angehängten Punkte zu den 16 Zeichen. count_chars ist die Länge einer Zeichenkette.
Zuweisung und Standardwerte
{def} legt eine Variable an und {set} ändert eine vorhandene; assign von Smarty tut beides. Ein Standardwert kommt von first_set, dem
ersten gesetzten Parameter; cond ist der ternäre Ausdruck der Template-Sprache:
def $name = 'Ada' $visits = 3
set $visits = $visits|inc
$name has visited $visits times.
Nickname: first_set( $nickname, 'none given' )
Greeting: cond( $visits|gt( 3 ), 'welcome back', 'hello' )Ausgabe:
Ada has visited 4 times.
Nickname: none given
Greeting: welcome backBedingungen und Schleifen
if und foreach lesen sich fast gleich. Das Durchwechseln von Werten ist ein Parameter der Schleife (sequence), und ein Bereich wird
for <erster> to <letzter> as $var geschrieben:
def $count = 2
if $count|eq( 0 )noneelseif $count|eq( 1 )oneelse$count items/if
foreach hash( 'a', 'apple', 'b', 'banana', 'c', 'cherry' ) as $key => $fruit sequence array( 'odd', 'even' ) as $row
<li class="$row">$key: $fruit</li>
/foreach
for 1 to 3 as $i[$i]/forAusgabe:
2 items<li class="odd">a: apple</li><li class="even">b: banana</li><li class="odd">c: cherry</li>[1][2][3]Die Zeilenumbrüche um jedes Funktions-Tag sind aus der Ausgabe verschwunden: Der Parser entfernt einen Zeilenumbruch vor und einen nach jedem Funktions-Tag (siehe Lexikalische Struktur). Smarty behält sie.
Include, literal, Begrenzer und Kommentare
include nimmt eine uri, meist design:..., die die Design-Ressource über die Design-Basen und das Override-System auflöst. Dieses Beispiel
bindet eine kleine eigene Datei mit der Ressource file: ein, sodass es außerhalb eines Designs läuft; die eingebundene Datei ist:
<p>Hello, $who|wash!</p>und das Template, das sie einbindet, mit einem literal-Block, den beiden Begrenzerfunktionen und einem Kommentar:
include uri='file:var/tmp/examples/tl-smarty/parts/greeting.tpl' who='designer'
{* a comment is never output *}
literal<style>.box { color: red; }</style>/literal
ldelimnot a tagrdelimAusgabe:
<p>Hello, designer!</p>
<style>.box { color: red; }</style>{not a tag}Capture
set-block rendert seinen Inhalt in eine Variable, wie capture von Smarty. Das Ergebnis ist eine gewöhnliche Zeichenkette, mit der
Operatoren arbeiten können:
set-block variable=badge<span class="badge">'new'|upcase</span>/set-block
Captured $badge|count_chars characters: $badgeAusgabe:
Captured 30 characters: <span class="badge">NEW</span>Daten und Anzahlen
Daten sind Zeitstempel; datetime( 'custom', <format> ) formatiert sie mit den Platzhaltern % des Locale-Codes, und l10n( 'shortdate' )
nutzt das kurze Datumsformat der aktuellen Locale:
def $node = fetch( 'content', 'node', hash( 'node_id', 90 ) )
Published: $node.object.published|datetime( 'custom', '%Y-%m-%d' )
Short date: $node.object.published|l10n( 'shortdate' )
Fields: $node.data_map|countAusgabe:
Published: 2023-01-25
Short date: 01/25/2023
Fields: 18Verwandte Seiten
- Von Exponential-Templates (.tpl) zu Exponential-Smarty-Templates (.stpl) umziehen: Smarty-Templates, von Exponential selbst ausgeführt
- Alle drei Engines, Twig eingeschlossen: Templates nebeneinander: Exponential-Templates, Twig und Smarty
- Zurück: Geschichte der Template-Sprache
- Weiter: Smarty und die Template-Sprache: die Unterschiede im Detail
- Ein Template von Smarty umziehen
- Grundlagen der TPL-Syntax
- Set-block und append-block
- Wash und Maskierung
- 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.