Web.template

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

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.

Gdzie znajdę?