Konkretno:
PHP fajl
Code:
// pretpostavka da je smarty direktorji otpakovan na zamisljenoj putanji
require("smarty/Smarty.class.php");
// incijaliziacije
$smarty = new Smarty;
// par neophodnih podesvanja
// putanja gdje su smjesteni sami predlosci
$smarty->template_dir = "tpls";
// direktorij po kojem apache moze da pise (znaci chmod 777)
// zato sto tu smjesta trenutne zapise vezane oko obrade PHP coda
$smarty->compile_dir = "smarty/compile";
// direktoriji za neka smarty podesavanja (iskreno, slabo korisim)
$smarty->config_dir = "smarty/configs";
// ako koristis smary kesiranje, to je direktorji za cuvanje kesirnih fajlova
$smarty->cache_dir = "smarty/cache";
// inace ovo se provalaci kros sve stranice sajta pa se smjesta u jedan fajl i inkluda. tak da to
// napises jednom i uglavnom zaboravis da postoji
// informacije stavimo u varijable
$ime = "Bob";
$prezime = "Marley";
// sada cemo da iz PHPa neke informacije da proslijedimo u Smarty klasu
$smarty->assign('ime', $ime);
$smarty->assign('prezime', $prezime);
// da sve ne bude dosadno dodacemo jedan niz
$kontakt_informaciije = array(
"adresa" => 'Kokosovih Oraha 12',
"drzava" => 'Jamajka',
"telefon" => '387 65 666 999'
);
// sada citav niz proslijedimo u smarty klasu
$smarty->assign('kontakt_informacije', $kontakt_informacije);
// i sada da sve na osnovnik stvarima porosledicemo i jedean multidimenzioni niz.
// recimo da se radi o adresaru gore spomenutog covjeka
$adresar =
array(
0 => array ( "ime" => 'Joe', "prezime" => 'Cocker', "mob" => '123 123 123', "tel" => '456 456 456', "fax" => '789 789 798' ),
1 => array ( "ime" => 'Alfonso', "prezime" => 'Guerrero', "tel" => '456 456 456'),
2 => array ( "ime" => 'Ruben', "prezime" => 'Gonzales', "mob" => '123 123 123', "tel" => '456 456 456', "fax" => '789 789 798' ),
3 => array ( "ime" => 'Nico', "prezime" => 'Saqiuto', "mob" => '123 123 123', "tel" => '456 456 456', ),
4 => array ( "ime" => 'Papi', "prezime" => 'Oviedo', "mob" => '123 123 123', "tel" => '456 456 456', ),
);
// i njega suteno u templait
$smarty->assign('adresar', $adresar);
// posto su sve informacije koje nase informacije treba da saopsti krajnjem korisniku
// poslate u samu smarty klasu, sada cemo reci smartyu koji template da koristi
$smarty->display('profil.html');
I sada treba da kreiramo profil.html. Kao sto se vidi iz linije 12 ( >> $smarty->template_dir = "tpls"; << ) to treba da se nalazi u folderu tpls. evo i fajla
Code:
<html>
<head>
<title>muuuu</title>
</head>
<body>
<!--
U templatu vrismo ispis svega. Naravno moramo naznaciti u fajlu gdje se koja varijable "stampa".
Po defaultu to radimo ovako: {$ime_varijable}
Da razvalimo na djelove:
{ - ljevi delimiter
$ - oznaka za string
ime_varijable - ime varijable, ne mora nuzno biti isto kao u PHPu znaci: $smarty->assign('[b]prezime[/b]', $prezime);
} - desni delimiter
Ovo sa delimiterima treba malo razjasniti pogovo pocetnicima.
Defaulti delimiter u PHPu je velika zagrada. To je logican potez posto se u HTML jeziku ta zagrada nigdje ne koristi (koriste se samo: <, =, ', ", >).
Medjutim problem nastaje kada u code direktno stavljate CSS ili HTML. Naravno i za to postoji rjesenje tj tri.
Prvo - linkajte CSS i JS code
Drugo - koristite smarty funkciju [url href=http://smarty.php.net/manual/en/language.function.literal.php]literal[/url]
Trece - kada "podesavate smarty" promjenite delimitre. To se radi u PHP fajlu i ovako:
$smarty->left_delimiter = '~';
$smarty->right_delimiter = '~';
onda bi smarty poziv izglo ovako ~$ime~
(trece je samo teorija, rjetko se koristi, mutavo je)
-->
<h2>{$ime} {$prezime}</h2>
<!--
rad sa nizovima je extremno slican kao i sa obicnim varijablama. pogledajmo poziv
{$kontakt_informacije.adresa}
kontakt_informacije - ime koje je dodjeljeno prilim slanja informacije u smarty klasu
. - separator izmedju
adresa - asocijativni pointer na vrijednost u nizu
Takodje se moze koristi i numericki pointer na vrijednost.
Prva vrijednost je 0 tako da se sledeci code moze napisati i :
{$kontakt_informacije.0} <br>
{$kontakt_informacije.1} <br>
{$kontakt_informacije.2} <br>
apsolutno neelegantno
-->
<h3>
{$kontakt_informacije.adresa} <br>
{$kontakt_informacije.drzava} <br>
{$kontakt_informacije.telefon} <br>
</h3>
<br> <br>
<center>
<!--
Ispis multidimenzijonog niza je identican kao i jednodimenzionog (tj 2 dimenzionog). Znaci
{$ime_varijable.niz.pod_niz}
Sve to moze naravno u nedogled, npr:
{$adresar.poslovni.nabavka.sef_nabavke.telefon}
PHP ekvivalent
$mu = array ( "poslovni" => array ( "nabavka" => array( "sef_nabavke" => array( "telefon" => '123 123 123' ))));
Medjutim poenta ovog treceg pososa naseg dragog tutorijala nije ispis nepotrenog glubog ogromnog niza nego prezentacija
realne moci samrtija da manipuslie sa velikim nizovima koji cuvaju neke realne upotrebljive informacije, kao i prezentacije nekih
smarty funkcija koje nalazimo u klasicnim programskim jezicima. Redom:
foreach >> {foreach from=$niz item=pod_niz} loop blok {/foreach}
Ekvivalent je php foreach funkcija, ili za one koji ne zaju: funkcija vrti niz i rasclanjuje ga na vrijednosti ili u ovom slucaju opet nizove (posto su oni sledeca vrijdnost).
Moguce je koristit neograniceno mnogo ukljetenih foreach petlji.
if >> {if $varijabla > 9} blok {/if} - klasicna if petlja, ak ne znate sta radi koji moj sve ovo citate
U ovom slucaju varijablu imenkih razbijamo na osobe iz imenika i onda ispisujemo njihove kontakt podatke.
IF petlja provjerava da li taj podatak postoji u nizu, ako ne postoji nece ispisati njegov label, posto je to krajnje
mutavo
-->
<h2>Adresar</h2>
{foreach from=$adresar item=osoba_u_adresaru}
{if $osoba_u_adresaru.ime} Ime:{$osoba_u_adresaru.ime} <br> {/if}
{if $osoba_u_adresaru.prezime} Prezime:{$osoba_u_adresaru.ime} <br> {/if}
{if $osoba_u_adresaru.mob} Mobitel:{$osoba_u_adresaru.ime} <br> {/if}
{if $osoba_u_adresaru.tel} Telefon:{$osoba_u_adresaru.ime} <br> {/if}
{if $osoba_u_adresaru.fax} Fax:{$osoba_u_adresaru.ime} <br> {/if}
{/foreach}
<!--
Car ove naizgled nepotrebne petlje je sledeca. Imate neku tablicu u SQLu. Uzmimo bas da je to ovaj adresar.
U njemu se nalaze isti ovi podaci znaci ovak nekako izgleda:
FIELD: ime TYPE: varchar
FIELD: prezime TYPE: varchar
FIELD: mob TYPE varchar
FIELD: tel TYPE varchar
FIELD: fax TYPE varchar
i recimo da je popunjna podacima iz niza $adresar. Kada uradite u svojoj PHP aplikaciji sledece
while($_tmp = mysql_fetch_array(mysql_query("SELECT * FROM tabela))
{
$adresar[$row_num++] = $_tmp;
}
Ako se primasili pojentu to znaci da u 4 linije mozete prebaciti podatke iz SQLa u smarty i dati dizajneru da se pati
sa dizajnom.
-->
</center>
</body>
</html>
Evo dragi ljudi, ne mogu spavati pun mjesec pa vam napisa malo duzi post. Valja ce nekom pomoci, iako ja imam uzasnu moc prenosenja znanja.
E da ovo sada izgleda mutavo jel forum ne boji sintaxu ali kopirajte u nekih editor koji podrzava PHP i HTML sintaxu (npr. gedit, zend) pa citajte fino komentare :)
tu nema kašike....