Ein Template von Smarty umziehen
Diese Seite portiert ein kleines Template aus Smarty Schritt für Schritt in die Template-Sprache und endet mit einer Checkliste für Ihre eigenen Templates. Jeder Schritt wurde auf einer Entwicklungsinstallation gegen die Startseite „Fit & Healthy“ (Knoten 89) 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
- Das Template aus Smarty
- Schritt 1: Variablen
- Schritt 2: Die Daten kommen aus fetch
- Schritt 3: Schleife, Links, Daten und Maskierung
- Checkliste
- Verwandte Seiten
Das Template aus Smarty
Eine Liste der neuesten Seiten einer Sektion, wie sie in Smarty aussehen könnte. Das PHP, das sie rendert, weist $site und $pages zu. Das
ist Smarty, zum Vergleich; es wurde hier nicht ausgeführt:
assign var=limit value=3
<h2>$site.name|escape</h2>
if $pages|@count == 0
<p>No pages yet.</p>
else
<ul>
foreach from=$pages item=page
<li class="cycle values='odd,even'"><a href="$page.url">$page.name|truncate:30|escape</a>
$page.published|date_format:'%Y-%m-%d'</li>
/foreach
</ul>
/ifSchritt 1: Variablen
Aus {assign} wird {def}. Mehrere Variablen lassen sich in einem Tag definieren, über mehrere Zeilen. Statt $site vom PHP zu bekommen,
holt das Template den Knoten selbst. Aus escape wird wash:
{def $site = fetch( 'content', 'node', hash( 'node_id', 89 ) )
$limit = 3}
<h2>$site.name|wash</h2>Ausgabe:
<h2>Fit & Healthy</h2>Schritt 2: Die Daten kommen aus fetch
Die Liste ist ein Fetch content/list mit dem Elternknoten, dem Limit und der Sortierung. Die Prüfung der Anzahl nutzt den Operator count;
es gibt kein @ und kein ==:
{def $site = fetch( 'content', 'node', hash( 'node_id', 89 ) )
$limit = 3
$pages = fetch( 'content', 'list', hash( 'parent_node_id', $site.node_id,
'limit', $limit,
'sort_by', array( 'published', false() ) ) )}
<h2>$site.name|wash</h2>
<p>$pages|count of $site.children_count pages</p>Ausgabe:
<h2>Fit & Healthy</h2>
<p>3 of 16 pages</p>Schritt 3: Schleife, Links, Daten und Maskierung
Das fertige Template. Was sich geändert hat:
- Aus
{if $pages|@count == 0}wird{if $pages|count|eq( 0 )}. - Aus
{foreach from=$pages item=page}wird{foreach $pages as $page}. - Aus
{cycle values='odd,even'}wird der Schleifenparametersequence array( 'odd', 'even' ) as $row. - Ein Link ist der
url_aliasdes Knotens, durchezurlgeleitet, das den Pfad des Siteaccess und die Anführungszeichen hinzufügt:href={$page.url_alias|ezurl}. - Aus
truncate:30wirdshorten( 30 ), und ausescapewirdwash(nach dem Kürzen, damit keine Entität abgeschnitten wird). - Aus
date_formatwirddatetime( 'custom', ... )auf dem Zeitstempelpublisheddes Objekts. {undef}am Ende entfernt die Variablen; in einem Template einer vollständigen Ansicht werden mit{def}angelegte Variablen am Ende der Datei ohnehin entfernt.
{def $site = fetch( 'content', 'node', hash( 'node_id', 89 ) )
$limit = 3
$pages = fetch( 'content', 'list', hash( 'parent_node_id', $site.node_id,
'limit', $limit,
'sort_by', array( 'published', false() ) ) )}
<h2>$site.name|wash</h2>
if $pages|count|eq( 0 )
<p>No pages yet.</p>
else
<ul>
foreach $pages as $page sequence array( 'odd', 'even' ) as $row
<li class="$row"><a href=$page.url_alias|ezurl>$page.name|shorten( 30 )|wash</a>
$page.object.published|datetime( 'custom', '%Y-%m-%d' )</li>
/foreach
</ul>
/if
undef $site $limit $pagesAusgabe:
<h2>Fit & Healthy</h2><ul> <li class="odd"><a href="/slash-quotes">Slash Quotes</a>
2026-10-17</li> <li class="even"><a href="/exponential-live">Tour</a>
2026-10-05</li> <li class="odd"><a href="/fit-healthy-site-info">Fit & Healthy site info - [...</a>
2026-08-31</li></ul>Die Liste zeigt, was auf einer Entwicklungsinstallation zuletzt veröffentlicht war, als diese Seite entstand; auf Ihrer Website werden die Namen also andere sein.
Checkliste
| Smarty | Template-Sprache |
|---|---|
{assign var=x value=...}, {$x = ...} | {def $x = ...}, später {set $x = ...} |
{$a + $b}, {$a * 2} | {sum( $a, $b )}, {$a|mul( 2 )} |
==, !=, >, <, >=, <= | eq, ne, gt, lt, ge, le |
&&, ||, ! | and( ... ), or( ... ), not( ... ) |
|default:'x' | first_set( $var, 'x' ) |
|escape, |escape:'url' | |wash, |rawurlencode |
|truncate:n | |shorten( n ) |
|upper, |lower, |capitalize | |upcase, |downcase, |upword |
|date_format:'...' | |datetime( 'custom', '...' ) oder |l10n( 'shortdate' ) |
|@count | |count |
{foreach from=$a item=i key=k} | {foreach $a as $k => $i} |
{foreachelse} | {if $a|count}...{else}...{/if} um die Schleife |
{cycle values='a,b'} | sequence array( 'a', 'b' ) as $s |
{section name=i loop=$a} | {foreach}, oder {for 0 to ... as $i} für Bereiche |
{include file='x.tpl'} | {include uri='design:x.tpl'} |
{capture name=x} | {set-block variable=x} |
{extends}, {block} | Overrides und das Pagelayout |
{php} | ein Operator oder eine Fetch-Funktion in einer Erweiterung |
{$smarty.get.x} | ezhttp( 'x', 'get' ), vor der Ausgabe gewaschen |
Rendern Sie das Template nach dem Portieren mit eingeschalteter Debug-Ausgabe und lesen Sie die Warnungen: Ein Operator, der nicht existiert,
und ein set auf eine nie definierte Variable scheitern beide stillschweigend in der Seite (siehe
Smarty und die Template-Sprache: die Unterschiede im Detail).
Verwandte Seiten
- Von Exponential-Templates (.tpl) zu Exponential-Smarty-Templates (.stpl) umziehen: Smarty-Templates, von Exponential selbst ausgeführt
- Zurück: Smarty und die Template-Sprache: die Unterschiede im Detail
- Weiter: Von .tpl zu .stpl umziehen
- Knoten und Listen holen
- URL-Operatoren
- Daten, Zahlen und Lokalisierung
- 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.