Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej Rozumiem

System szablonów SMARTY

Windu CMS wykorzystuje system templatów SMARTY. Ogólnie rzecz biorąc jest to silnik który pozwala wykorzystywać w bardziej zawansowany i prostszy sposób możliwości języka PHP z poziomu kodu HTML.

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.

Centrum pomocy

Masz problem techniczny?

Poradniki wideo