Wszystkie znaczniki w szablonach Smarty są otoczone ogranicznikami. Domyślnie ograniczniki to { i }, ale mogą one zostać zmienione .
Dla następujących przykładów będziemy używać domyślnych znaczników. W Smarty cała treść na zewnątrz ograniczników jest wyświetlana jako treść statyczna, lub niezmieniona. Kiedy Smarty napotyka na znaczniki szablonu, zaczyna je interpretować, i wyświetla zanalizowane dane wyjściowe w ich miejsce.
Komentarze szablonu są otoczone gwiazdkami, które z kolei otoczone przez ograniczniki np. {*to jest komentarz*}. Komentarze Smarty nie są wyświetlane w końcowym wyjściu szablonu, w odróżnieniu od unlike <!-- komentarzy HTML -->. Komentarze Smarty sa użyteczne do robienia wewnętrznych notatek wewnątrz szablonu.
Example 3.1. Komentarze
<body>
{* komentarz w jednej lini *}
{* to jest wieloliniowy
komentarz, który
nie zostanie wysłany do przeglądarki
*}
{* tutaj dołączam plik nagłówka *}
{include file="header.tpl"}
{* Nota dev: $includeFile jest przyporządkowana ze skryptu foo.php *}
<!-- to jest komentaz html, który zostanie wysłany do przeglądarki -->
{include file=$includeFile}
{include file=#includeFile#}
{* zredukowany nlok <select> *}
{*
<select name="company">
{html_options options=$vals selected=$selected_id}
</select>
*}
</body>Zmienne szablonu zaczynają sie od znaku $ dollara. Moga zawierać cyfry, litery i podkreślniki - podobnie jak zmienne PHP. Możesz odwoływać sie do tablic indexowanych numerycznie lub nienumerycznie. Możesz również odwoływać sie do własciwości i metod obiektów. Zmienne plików konfiguracyjnych są wyjątkiem od skladni rozpoczynajacej się znakiem dolara. Można się do nich odwoływac przez otoczenie ich #znakamihash# lub specjalnej zmiennej $smarty.config.
Example 3.2. Zmienne
{$foo} <-- wyswietla prostą zmienną (nie tablicę/obiekt)
{$foo[4]} <-- wyswietla piąty element tablicy o indexowaniu zaczynającym sie od zera
{$foo.bar} <-- wyswietla wartości tablicy dla indexu "bar", podobnie jak PHP $foo['bar']
{$foo.$bar} <-- wyswietla wartości tablicy dla indexu zawartego w zmiennej, podobnie jak PHP $foo[$bar]
{$foo->bar} <-- wyswietla własciwość "bar" obiektu "foo"
{$foo->bar()} <-- wyswietla zwróconą wartości przez metodę "bar"
{#foo#} <-- wyswietla zmienną konfiguracyjną "foo"
{$smarty.config.foo} <-- synonim dla {#foo#}
{$foo[bar]} <-- składnia poprawna tylko dla pętli sekcji, zobacz {section}
{assign var=foo value="baa"}{$foo} <-- wyswietla "baa", zobacz {assign}
Dozwolonych jest wiele innychkombinacji:
{$foo.bar.baz}
{$foo.$bar.$baz}
{$foo[4].baz}
{$foo[4].$baz}
{$foo.bar.baz[4]}
{$foo->bar($baz,2,$bar)} <-- przekazywanie parametrów
{"foo"} <-- dozwolone są statyczne wartościKażdy znacznik Smarty nawet ten wyświetlający zmienną lub wywołujący jakieś sortowanie zależy od funkcji. Funkcje są wykonywane i wyświetlane przez ograniczenie funkcji i jej atrybutów w ogranicznikach np. {nazwafunkcji attr1="val" attr2="val"}.
Example 3.3. Zapis funkcji
{config_load file="colors.conf"}
{include file="header.tpl"}
{if $highlight_name}
Welcome, <font color="{#fontColor#}">{$name}!</font>
{else}
Welcome, {$name}!
{/if}
{include file="footer.tpl"}Zarówno wbudowane funkcje i costum functions posiadają takie samo wyrażenie w szablonach.
Funkcje wbudowane działają wewnątrz Smarty, tak jak {if}, {section} i {strip}. Nie mogą być modyfikowane.
Costum functions to dodatkowe funkcje implementowane przez wtyczki. Mogą być modyfikowane do twoich potrzeb, możesz również dodawać nowe. {html options} i {html_select_date} to przykłady i costum functions.
Duża część funkcji pobiera atrybuty aby sprecyzować lub zmodyfikować swoje zachowanie. Atrybuty do funkcji Smarty są podobne do atrybutów HTML. Statyczne wartości nie muszą być zawarte w cudzysłowach, ale jest to zalecane ciągów znaków. Zmienne również mogą być używane i nie powinno sie ich zawierać w cudzysłowy.
Niektóre atrybuty wymagają boolowskich wartości (prawda lub fałsz). Te atrybuty moga być wyspecyfikowane jako inne nie zawierające się w cudzysłowach true, on, i yes, albo false, off, i no.
Example 3.4. Zapis atrybutów funkcji
{include file='header.tpl'}
{include file='header.tpl' attrib_name='attrib value'}
{include file=$includeFile}
{include file=#includeFile# title='Smarty is cool'}
{html_select_date display_days=yes}
{mailto address='smarty@example.com'}
<select name='company_id'>
{html_options options=$companies selected=$company_id}
</select>Smarty rozpozna zmienne osadzone w podwójnych cudzysłowach gdy ich nazwy zawierają tylko cyfry, litery, podkreślniki i nawiasy kwadratowe []. W każdym innym przypadku zmienna musi być otoczona przez pojedyncze cudzysłowy ( ` ). Nie mozna w cudzysłowach zamieszczać modyfikatorów muszaznależć się one na zewnątrz.
Example 3.5. Osadzanie wyrażeń w cudzysłowach
PRZYKŁADY WYRAŻEŃ:
{func var="test $foo test"} <-- widzi $foo
{func var="test $foo_bar test"} <-- widzi $foo_bar
{func var="test $foo[0] test"} <-- widzi $foo[0]
{func var="test $foo[bar] test"} <-- widzi $foo[bar]
{func var="test $foo.bar test"} <-- widzi $foo (not $foo.bar)
{func var="test `$foo.bar` test"} <-- widzi $foo.bar
PRAKTYCZNE PRZYKŁADY:
{include file="subdir/$tpl_name.tpl"} <-- zastąpi $tpl_name jego wartością
{cycle values="one,two,`$smarty.config.myval`"} <-- zastąpi $smarty.config.myval wartością Matematyka może zostac zastosowana bezpośrednio do wartości zmiennych.
Example 3.6. Przykłady matematyki w szablonach
{$foo+1}
{$foo*$bar}
{* bardziej skomplikowane przykłady *}
{$foo->bar-$bar[1]*$baz->foo->bar()-3*7}
{if ($foo+$bar.test%$baz*134232+10+$b+10)}
{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}
{assign var="foo" value="`$foo+$bar`"}Zobacz również funkcje {math} dla kompleksowych równań.
Czasami jest pożądane a nawet niezbedne aby Smarty zignorował sekcjie które normalnie by zostały sparsowane. Klasycznym przykładem jest umieszczanie kodu Javascript lub Css w szablonie. Problem powstaje ponieważ te języki używają znaków { i }, które jednocześnie są dmyślnymi ogranicznikami dla Smarty.
Najpostrzą czynnością jaką można wykonać aby uniknąć tej sytuacji jest przeniesienie kodu Javascript i CSS do osobnych plików używając standardowych metod jezyka HTML aby uzyskać do nich dostęp.
Dołączanie literalnej zawartości jest możliwe przez użycie bloku {literal} .. {/literal}. Podobnie jak HTMLowskich encjie możesz używać {ldelim}, {rdelim} lub {$smarty.ldelim} aby wyswietlić obecne ograniczniki.
Często wygodnie jest poprostu zmienić $left_delimiter and $right_delimiter Smartego.
Example 3.7. Pzykład zmiany ograniczników
<?php
$smarty = new Smarty;
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
$smarty->assign('foo', 'bar');
$smarty->display('example.tpl');
?> Gdzie example.tpl:
Example 3.8.
<script language="javascript">
var foo = <!--{$foo}-->;
function dosomething() {
alert("foo is " + foo);
}
dosomething();
</script>Zobacz również modyfikator escape.