1. Podstawowe wyrażenia

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.

1.1. Komentarze

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>

1.2. Zmienne

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ści

1.3. Funkcje

Każ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.

1.4. Atrybuty

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>

1.5. Osadzanie zmiennych w podwójnych cudzysłowach

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ą 

1.6. Matematyka

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ń.

1.7. Opuszczanie pasowania Smarty

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.