Mediovski Technology

Smarty 3

Data: 2 Listopad 2009 15:50 Autor: Krzysztof Kwiatkowski | Kategoria: PHP,Smarty

Niedawno ukazała się beta trzeciej odsłony popularnego systemu szablonów Smarty. Przynosi ona dużo usprawnień w stosunku do poprzedniej wersji, tak w samej architekturze systemu, jak i w składni samych szablonów.

Smarty 3 korzysta z dobrodziejstw PHP5, a w szczególności jego obiektowości, także miłośnicy starszych wersji PHP mogą mieć problemy.

Nowe Smarty korzysta teraz z analizy leksykalnej z prawdziwego zdarzenia. Dzięki czemu możliwe są rzeczy, których w Smarty 2 nie mogliśmy zrobić np. prawie wszędzie można korzystać z wyrażeń (nie potrzeba pluginu {math}, żeby mnożyć, dzielić i dodawać nawet kilka zmiennych na raz!), można wreszcie tworzyć tablice ({assign var=foo value=[1,2,3]}), można korzystać z “krótkiej” składni przypisań ({$spam=$eggs+42} zamiast {assign var=spam value=$eggs+42)), i tak dalej, i tak dalej… dużo poprawek w składni.

Trzeba jednak uczciwie dodać, że szablony i wtyczki napisane dla Smarty 2 i dalej pisane w sposób znany ze Smarty 2, powinny działać i w nowej wersji. Stara składnia jak na razie jest w pełni wspierana.

Sami autorzy, za jedną z najważniejszych cechy Smarty 3, uważają szybkość. Dzięki przepisaniu od nowa całego systemu podobno udało się uzyskać od 2 do 5 razy lepsze wyniki, w porównaniu z poprzednikiem. Dla mnie, jako osoby piszącej szablony, bardzo dużym udogodnieniem jest także nowe podejście do obsługi wstawek javascript/css (wreszcie koniec przebrzydłych tagów {literal}!).

Dokładne omówienie zmian zawiera plik README, dołączany do dystrybucji. Jak na razie nie ma dokładnej dokumentacji na oficjalnej stronie projektu, ale na pewno z nadejściem wersji stabilnej się to zmieni.

A na deser garść przykładów zaczerpniętych z README:

Standardowe użycie — tak jak poprzednio:

require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('foo','bar');
$smarty->display('index.tpl');
{$x+$y}                       // wypisze sumę x i y.
{$foo = strlen($bar)}         // funkcja w przypisaniu
{assign var=foo value=$x+$y}  // wyrażenie w przypisaniu
{$foo = myfunct( ($x+$y)*3 )} // wyrażenie jako parametr funkcji
{$foo[$x+3]}                  // indeks w tablicy obliczany z wyrażenia

Można definiować tablice!

{assign var=foo value=[1,2,3]}
{assign var=foo value=['y'=>'yellow','b'=>'blue']}

Tablice moga być zagnieżdżane:

{assign var=foo value=[1,[9,8],3]}

Nowy sposób dostawania się do elementów tablicy:

{$foo['bar']}

Zmienne w nazwach zmiennych:

{$foo_{$x}} // wypisze zawartość $foo_1 jeśli $x ma wartość 1

Można robić też takie rzeczy:

{$object->method1($x)->method2($y)}

Nowe pętle! For zamiast {section}:

{for $x=0, $y=count($foo); $x > $y; $i++}  ....  {/for}

Nowa, bardziej PHPowa składnia {foreach}:

{foreach $myarray as $var}   ....  {/foreach}

While:

{while $foo ==  true} ..... {/while}

Funkcje w template’ach:

{function name=eggs spam=0}
{if $spam > 3}
{$spam}
{eggs spam=$spam+1}
{/if}
{/function}
{eggs}

wypisze ’012′! Świetnie, prawda?

RSS
Get Adobe Flash player