Loading...

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.

Nieustannie pracujemy nad rozwojem Windu CMS!

Zaglądając na stronę windu dowiesz się o nowościach i planach związanych z CMS’em

2021-01-27 Windu 4.0 - nowa aktualizacja

Po 6 latach przerwy postanowiliśmy przygotować i dodać nową wersje naszego systemu CMS. Windu 4.0 dostępne do pobierania oraz aktualizowania, wprowadziliśmy w nim między...

2014-05-28 Windu 3.1 - lista zmian

Windu 3.1 dostępne do pobierania oraz aktualizowania, wprwadziliśmy w nim między innymi:   Aktualizacja modułu forum, dokończenie i poprawienie obecnego w wersji 3.1...

2014-05-17 Raport z pola walki!

W ostatnim czasie od premiery Windu 3.0 wykonaliśmy sporo nowych rzeczy na Windu. Najważniejsza w najbliższym czasie będzie aktualizacja systemu do wersji 3.1 która...

Kup licencję PRO!

Już teraz aktywuj mnóstwo dodatków w twoim Windu!

Kup licencję PRO