Web.template
Z PHPEdia.pl
Spis treści |
web.template
Jest to stosunkowo nowy system szablonów, opierający się o język przypominający XML, dość ładnie integrującym się z (X)HTMLem. Ponadto poza typowym podejściem do szablonów oferuje on coś jeszcze (ale o tym dalej).
System ten kompiluje szablony do kodu PHP, a także może używać cache-u. Cache jak i szablony mogą być przechowywane w dowolnym miejscu ćÂ? wystarczy napisać odpowiedni sterownik (implementujący interfejs IWTResource), np. do przechowywania szablonów i cachu w bazie danych.
System oferuje następujące tagi:
| słowo | Opis |
| var | wyświetla wartość zmiennej ćÂ? przyjmuje parametr name będący nazwę zmiennej oraz ewentualnie parametr modifier określający modyfikator który ma zostać użyty przed wyświetleniem zmiennej |
| if | instrukcja warunkowa ćÂ? przyjmuje ona dwie postacie: jedna z parametrami lvalue, która określa lewć zmienną w wyrażeniu, rvalue, która określa prawć zmienną w wyrażeniu, condition, kżra określa operacje porównania (<, >, <> lub !=, = lub ==, eq ćÂ? strcmp(ć?ą), lub postac przyjmującć tylko jeden parametr isset) |
| foreach | pętla ćÂ? przyjmuje ona minimum dwa parametry ćÂ? data ćÂ? nazwa zmiennej z tabelę danych, value ćÂ? zmienna w której będą się znajdowaśy dane z pętli; dodatkowo można podać parametry key ćÂ? nazwa zmiennej z nazwami kluczy z tabeli, oraz name ćÂ? nazwa pętli (przydatna w przypadku konieczności uzyskania informacji o pętli) |
| cycle | generuje na zmianą kolejne wartości podane w parametrze values; typowo parametry są oddzielane przecinkami, jeśli trzeba użyć innego separatora, należy zdefiniować go w parametrze delimeter; inne parametry to name, print (false powoduje wyśćczenie wyświetlania wartości), oraz assign (nazwa zmiennej której mają zostać przypisane generowane wartości) |
| counetr | generuje kolejne wartości; może przyjmować następujące parametry: name, skip ćÂ? ominiącie X elementów i liczenie od elementu aktualny+skip, direction - kierunek doliczania (down ćÂ? duś, up - gżra), start ćÂ? wartość od której licznik ma startować, print ćÂ? czy wartości mają być wyświetlane (standardowo są wyświetlane, wartość false zablokuje ich wyświetlanie), assign ćÂ? nazwa zmiennej której mają być przypisane wartości |
Użycie standardowe
Typowo z web.template można korzystać jak z każdego innego systemu szablonów (np. Smarty). Kod PHP:
$tpl = new WebTemplate();
$tpl->setCacheDir('/home/administrator/public_html/wt/Tests/templates/cache/');
$tpl->setCompileDir('/home/administrator/public_html/wt/Tests/templates/compile/');
$tpl->setTemplateDir('/home/administrator/public_html/wt/Tests/templates/templates/');
$tpl->assign('test', 'wartosc');
$tpl->display('test_var1.tpl');
Kod szablonu:
<wt:var name="test"/>
Trzeba jednak pamiętać że znaczników nie można zagnieżdżać. Gdy wartość musi być przypisana jakiemuś parametrowi (X)HTMLa, wówczas trzeba skorzystać z następującej konstrukcji w szablonie:
<a wt:href="http://foobar.com?{test}">Link</a>
Co wygenberuje stronę z kodem:
<a href="http://foobar.com?wartosc">Link</a>
Użycie klas zamiast assign
Innym sposobem korzystania z web.template jest utworzenie klas z metodami getXyz() zamiast użycia assign:
$tpl = new WebTemplate();
$tpl->setCacheDir('/home/administrator/public_html/wt/Tests/templates/cache/');
$tpl->setCompileDir('/home/administrator/public_html/wt/Tests/templates/compile/');
$tpl->setTemplateDir('/home/administrator/public_html/wt/Tests/templates/templates/');
class Test {
public function getName() {
return 'Variable form Test class.';
}
}
$tpl->assign('test', 'Variable test');
$tpl->addVarClass('class', new Test);
$tpl->addVarClass('varClass', array('name'=>'TestVarClass', 'path'=>'./', 'extension'=>'.php'));
$tpl->display('test_var2.tpl');
Klasa TestVarClass umieszczona zostanie w pliku TestVarClass.php:
<?php
class TestVarClass {
public function getTest() {
return 'Variable from TestVarClass class (see TestVarClass.class.php file).';
}
}
?>
A oto szablon:
<wt:var name="test"/> <wt:var name="class.name"/> <wt:var name="varClass.test"/>
Tablice
Warto jeszcze zobaczyć jak obsługuje się tablice w web.template:
class User {
public function getInfo() {
return array('name'=>'Marcin', 'surname'=>'Staniszczak');
}
}
$tpl->assign('test', array('foo'=>'bar', 'bar'=>'foo'));
$tpl->assign('test1',
array(
'foo' => array (
'foo1' => 'bar1',
'bar1' => 'foo1'
)
)
);
$tpl->addVarClass('user', new User);
$tpl->setCaching(false);
$tpl->display('test_var3.tpl');
I szablon:
<wt:var name="test[bar]"/> <wt:var name="test[foo]"/> <wt:var name="test1[foo,foo1]"/> <wt:var name="test1[foo, bar1]"/> <wt:var name="user.info[name]"/> <wt:var name="user.info[surname ]"/>
I co dalej?
To oczywiście nie wszystkie możliwości web.template, a tylko wybżr i krżtki opis. Zachćcam do pobrania biblioteki, potestowania i zgśaszania uwag oraz propozycji.
