Citat:
Milos911: Jos plus pokusavao sam par puta da naucim kako da ga koristim ali nigde nisam nasao neki dovoljno razumljiv tutorial. Evo naprimer u tvojoj poruci skoro nista nisam razumeo.
Aha, ok, ja sam mislio da si ti imao iskustva sa nekim template engine-om, pa se samo dvoumiš dal' da ideš sa Smarty-jem. Možda sam te najpre zbunio sa ovim pojmom
bootstrap fajl? Boostrap bi bio neki zajednički skript za tvoje ostale skriptove u aplikaciji. Pritom nemoj ovaj bootstrap o kome sad pričam nije isto što i boostrap u nekom framework-u, npr. ZF-u, itd. On predstavlja ulaznu tačku pri svakom zahtevu u tvojoj aplikaciji. Recimo, imaš stranice index.php, foo.php, bar.php, i svaka od njih će učitavati taj tvoj boostrap fajl. U njemu se obično nalaze sledeće stvari: definisanje osnovnih putanja, set-ovanje include path-a i eventualtno inicijalizacija nekih komponenti koje se koriste u većini stranica. Jedna od tih komponenti bi bila upravo Smarty. Da ne bi u svakoj tvom skriptu morao da instanciraš Smarty, ti to samo jednom uradiš u bootstrap-u, nešto onako kako sam i napisao, i posle tu promenljivu $smarty (ili kako god da je ti nazoveš) možeš da koristiš u tvojim skriptovima (index.php, foo.php, bar.php).
A sad šta je ideja Smarty-ja i uopšte template engine... Grubo gledano, cilj je da nigde u svojim skriptovima nemaš
echo, odnosno da PHP koristiš za onu pravu,
business logiku, a da se za ispis brine neko drugi. A taj "neko drugi" su template-i. Svaki tvoj skript (stranica) bi trebao da ima odgovarajući templejt. U templejtu bi trebao da se nalazi samo (x)HTML kod, sa naravno ispisom promenljiva koje dolaze iz PHP-a na određenim mestima. Evo jedan primer celog postupka:
index.php
Code:
include_once('putanja/do/bootstrap.php'); //Ucitavanje bootstrap-a
global $smarty; //Instanca Smarty-ja.
//Ovde sad recimo dohvataš nešto iz baze...
$podaci = $nekiModel->dohvatiNekePodatke();
//I na kraju rezultat "daš" Smarty-ju:
$smarty->assign('podaci', $podaci);
$smarty->display('index.tpl');
I to je kraj PHP koda. Ova poslednja linija koda prikazuje templejt, i u nju možeš da shvatiš kao izlazak iz PHP i ulazak u display logiku, odnosno u ovo što sledi:
index.tpl
Code:
<html>
<body>
{foreach from=$podaci item=podatak}
{$podatak.ime} {$podatak.prezime} <br />
{/foreach}
</body>
</html>
Ovaj templejt radi jedan običan ispis tih podataka iz baze u petlji. Jednostavno, umesto da si to isto uradio u index.php, ti razdvajaš te dve stvari (logiku i prikaz), i taj ispis radiš na drugom mestu, u templejt skriptu. E sad, taj Smarty-jev pseudo kod (mislim na sve to unutar vitičastih zagrada) je nešto na šta ćeš morati da se navikneš, ali lako se uči. Uglavnom, bitno je da shvatiš da kad si angažovao (assign() metod) neku promenljivu Smarty-ju, ona je dostupna u templejtu koji prikazuješ (display() metod), u ovom slučaju to je ta promenljiva $podaci. Naravno, tvoji templejt fajlovi nikad ne bi trebalo da izgledaju tako, sa sve <html> i <body> tag-ovima, već bi sve što je zajedničko i što se ponavlja trebao da rasporediš u recimo header.tpl i footer.tpl, a onda bi njih samo učitavao u templejte svake stranice: index.tpl, foo.tpl, bar.tpl, a u tim templejtima bi bio samo onaj sadržaj karakterisitčan za te stranice (index.php, foo.php, bar.php). U ovom primeru, taj index.tpl bi izgledao ovako:
Code:
{include file = "putanja/do/header.tpl"}
{foreach from=$podaci item=podatak}
{$podatak.ime} {$podatak.prezime} <br />
{/foreach}
{include file = "putanja/do/footer.tpl"}
Eto, nadam se da te nisam zbunio svim ovim, al' bitno je da za početak shvatiš ideju cele te priče o template engine-ima i uopšte
razdvajanju slojeva,
razdvajanju business od prezentacione logike, i onda ćeš videti koliko je to u stvari dobra i korisna stvar.