Przykładowo jeżeli bez systemu SMARTY chcielibyśmy wykonać kod PHP w naszym pliku index.php musieli byśmy wywołać kod zaczynający się od znaczników php, w przypadku smartów sprawa jest znacznie prostsza
{$moja_zmienna}
Jak widzimy jest znacznie prościej.
Jak zapewne zauważycie w Windu czasami wykorzystujemy pojedynczy nawias klamrowy a czasami podwójny. Pojedynczy nawias występuje w kodzie samego systemu CMS oraz w widgetach, natomiast w templatach wykorzystujemy podwójny nawias klamrowy. To jaki znacznik będzie wykorzystywany można zadeklarować w configu Smartów, my zdecydowaliśmy się na podwójny dlatego aby użytkownik w kodzie mógł wykorzystywać bez problemu nawiasy klamrowe które nie są w tym wypadku znakiem specjalnym wywołującym Smarty.
Składnia
Zmienną należy oczywiście przekazać do silnika Smarty. Możemy to zrobić na 2 sposoby. Albo wywołujemy odpowiedni kod z poziomu kontrolera, czyli w miejscu w którym definiujemy uruchomienie silnika smarty (zajmiemy się tym w części dotyczącej widgetów). Druga opcja to zdefiniowanie zmiennej z poziomu templata.{$foo} {assign var=foo value=[1,[9,8],3]} // can be nested Short variable assignment: {$foo=$bar+2} {$foo = strlen($bar)} // function in assignment {$foo = myfunct( ($x+$y)*3 )} // as function parameter {$foo.bar=1} // assign to specific array element {$foo.bar.baz=1} {$foo[]=1} // appending to an array Smarty "dot" syntax (note: embedded {} are used to address ambiguities): {$foo.a.b.c} => $foo['a']['b']['c'] {$foo.a.$b.c} => $foo['a'][$b]['c'] // with variable index {$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] // with expression as index {$foo.a.{$b.c}} => $foo['a'][$b['c']] // with nested index PHP-like syntax, alternative to "dot" syntax: {$foo[1]} // normal access {$foo['bar']} {$foo['bar'][1]} {$foo[$x+$x]} // index may contain any expression {$foo[$bar[1]]} // nested index {$foo[section_name]} // smarty {section} access, not array access! Variable variables: $foo // normal variable $foo_{$bar} // variable name containing other variable $foo_{$x+$y} // variable name containing expressions $foo_{$bar}_buh_{$blar} // variable name with multiple segments {$foo_{$x}} // will output the variable $foo_1 if $x has a value of 1. Object chaining: {$object->method1($x)->method2($y)} Direct PHP function access: {time()}
Definiowanie zmiennych z poziomu PHP
Jest to przykład ogólny, w przypadku Windu CMS zmienne w ten sposób będziemy definiowali jedynie z poziomu controllera widgetu.
$smarty->assign('lastname', 'Evans'); $smarty->assign('meetingPlace', 'New York'); $smarty->display('index.tpl');Wywołanie zmiennych zdefiniowanych w PHP
Hello {$firstname} {$lastname}, glad to see you can make it. {* this will not work as $variables are case sensitive *} This weeks meeting is in {$meetingplace}. {* this will work *} This weeks meeting is in {$meetingPlace}.
Modyfikatory
Każdą zmienną możemy w prosty sposób zmodyfikować, przyciąć, zmienić czy dokonać innych operacji. Do tego celu mamy szereg bardzo przydatnych i prostych narzędzi.Dokumentacja Smarty doskonale pokazuje wykorzystanie modyfikatorów
http://www.smarty.net/docs/en/language.modifiers.tpl
Lista możliwych gotowych modyfikatorów
- capitalize - {$articleTitle|capitalize} - zamiana pierwszej litery na wielką w każdym słowie
- cat - {$articleTitle|cat:' yesterday.'} - doklejanie zmiennej na końcu stringa
- count_characters - {$articleTitle|count_characters} - zwraca liczbę liter w stringu
- count_paragraphs - {$articleTitle|count_paragraphs } - zwraca liczbę paragrafów w stringu
- count_sentences - {$articleTitle|count_sentences } - zwraca liczbę zdań
- count_words - {$articleTitle|count_words } - zwraca liczbę słów
- date_format - {$yesterday|date_format:"%A, %B %e, %Y"} - zwraca sformatowaną datę
- default - {$articleTitle|default:'no title'} - w przypadku pustego ciągu znaków zwraca zdefiniowaną wartość domyślną
- escape - {$articleTitle|escape:'html'} - filtruje wybrane typy znaków, w przykładzie są to tagi HTML
- from_charset - zmiana typu kodowania stringa
- indent - {$articleTitle|indent:10} - dodaje wcięcie tabulatora dla danego stringa
- lower - {$articleTitle|lower} - zmienia litery na małe
- nl2br - {$articleTitle|nl2br} - zamienia znak nowej linii na znacznik htmlowy BR
- regex_replace - {$articleTitle|regex_replace:"/[rtn]/":" "} - pozwala na wykorzystanie wyrażeń regularnych
- replace - {$articleTitle|replace:'Garden':'Vineyard'} - zamienia wybrany wyraz na inny zdefiniowany w tagu
- spacify - {$articleTitle|spacify:"^^"} - pozwala na wstawienie pomiędzy każdą literę odpowiedniego znaku, na przykład spacji lub apostrofu
- string_format - {$number|string_format:"%.2f"} - pozwala na sformatowanie stingu jako liczbę
- strip - {$articleTitle|strip:' '} - usuwa lub zamienia odstępu na początku i końcu wieksza.
- strip_tags - {$articleTitle|strip_tags} - usuwa wszelkie tagi i pozostawia czysty tekst
- to_charset - zmienia kodowanie stringu
- truncate - {$articleTitle|truncate:30} - przycina ciąg do danej długości
- unescape {$articleTitle|unescape:"html"} - działa w odwrotny sposób do tagu escape
- upper - zmienia litery na duże.
- wordwrap - {$articleTitle|wordwrap:20} - łamie wyrazy dłuższe niż określone
Przykładowe wykorzystanie
{* apply modifier to a variable *} {$title|upper} {* modifier with parameters *} {$title|truncate:40:"..."} {* apply modifier to a function parameter *} {html_table loop=$myvar|upper} {* with parameters *} {html_table loop=$myvar|truncate:40:"..."} {* apply modifier to literal string *} {"foobar"|upper} {* using date_format to format the current date *} {$smarty.now|date_format:"%Y/%m/%d"} {* apply modifier to a custom function *} {mailto|upper address="smarty@example.com"} {* using php's str_repeat *} {"="|str_repeat:80} {* php's count *} {$myArray|@count}
Modyfikatory można sklejać i tworzyć ich kombinacje. Przykładowe wykorzystanie
{$articleTitle} {$articleTitle|upper|spacify} {$articleTitle|lower|spacify|truncate} {$articleTitle|lower|truncate:30|spacify} {$articleTitle|lower|spacify|truncate:30:". . ."}
Atrybuty
W smartach możemy przekazywać atrybuty, czyli includując plik tempalta czy wywołując funkcję mamy możliwość jej parametryzowania. Wykorzystywane jest to na przykład w przypadku widgetów czy kodów fraz językowej.{include file="header.tpl"} {include file="header.tpl" nocache} // is equivalent to nocache=true {include file="header.tpl" attrib_name="attrib value"} {include file=$includeFile} {include file=#includeFile# title="My Title"} {assign var=foo value={counter}} // plugin result {assign var=foo value=substr($bar,2,5)} // PHP function result {assign var=foo value=$bar|strlen} // using modifier {assign var=foo value=$buh+$bar|strlen} // more complex expression {html_select_date display_days=true} {mailto address="smarty@example.com"}
Więcej na ten temat znajdziemy na stronie projektu w obszernej dokumentacji:http://www.smarty.net/docs/en/ z której też pochodzą przytoczone przykłady.