[ ana @ 02.05.2003. 22:27 ] @
Pozdrav svima!
Tek sam se susrela sa Smarty-jem ,pa bi mi trebalo malo pomoci.
Interesuje me sta sve od fajlova treba napraviti za ispis jedne od stranica.
Htela bih da imam unificirani dizajn sajta za header,footer i menije,
odnosno da menjam samo sadrzaj centralnog dela strane - koji dobijam
ili kao obican tekst,ili upitom u bazu.

Da li je ovo dobra logika sta se gde radi,ili ipak treba drugacije:

default.php
new smarty
display('default.tpl')
default.tpl
include (header,menus,footer)
ispise contenet glavne strane
ima link na 'SPISAK PREDAVANJA'

predavanja.php
napravim upit u bazu i podatke za ispis prosledim u predavanja.tpl
new smarty
display('predavanja.tpl')
predavanja.tpl
include (header,menus,footer)
ispise podatke dobijene iz predavanja.php

p.s. Da li mozda negde ima da se skine source za bilo kakav sajt koji je ceo uradjen
sa php-om,smarty-jem,css-om i mysql bazom. Jedan kompletan primer bi mi bas dobro dosao :)
Ana
[ bluesman @ 03.05.2003. 02:16 ] @
Pa to je otprilike to, samo ne zaoravi da uradis assign za sve varijable koje prosledjujes u template. znaci (2 i 3 mozes da permutujes):

PHP:
1. settings
2. processing (upit iz baze i fetchovanje podatakaa)
3. $smarty = new smarty
4. smarty settings (ako neces default vrednosti) recimo:
$smarty->template_dir =..
$smarty->compile_dir =...
$smarty->config_dir =...
$smarty->cache_dir = ...

4. $smarty->assign
5. $smarty->display

TPL:
1. include i opciono assign ako ti treba...
2. prikaz podataka
... include... include... (koliko hoces puta i na kom hoces mestu)

To je neka logika... a sve ostalo ti pise u helpu (mada ako imas jos nekih nejasnoca - pokusacu da ti pomognem)
[ ana @ 03.05.2003. 23:31 ] @
tnx :)
Samo mi reci da li za svaku stranu treba praviti novu instancu smartija?
Kako bi izgledao kod za ispis neke tabele,ali da pratim broj reda sa nekom promenljivom koju takodje mogu da ispisem( nesto kao for petlja) .Evo za primer dela koda koji sam napisala u PHP-u,pa bih sada htela da tabelu $rezultat prenesem u template,a da ispis radim sa smartijem.

Code:

$rezultat = $kernel -> upit($query);                     
   if ($rezultat->brojRedova==0) {    echo " <BR> Nema podataka! ";   exit; }
   echo "<BR><BR> <H2>Aktuelne manifestacije su:</H2><BR>";
   echo "<table border = 1>";
 for($i = 1; $i <= $rezultat->brojRedova; $i++) {
   echo "<tr>";
   foreach($rezultat->tabela[$i] as $column){ echo "<td>" .$column . "</td>";  }
   echo "<td> <A HREF='InfoManifest.php?idM=$i' 
     TITLE='Podaci o Manifestaciji $i'>    Informacije o Manifestaciji $i </A></td></tr>"; 
 }
   echo "</table>"; 
[ -zombie- @ 04.05.2003. 01:47 ] @
prvo komentar za prvi post, kao što reče bluesman, to je otprilike to. nema tu mnogo mudrosti.

mada, ponekad u svom frameWork-u volim da koristim i malo generalnije šablone. recimo, ako iz php-a prosledim promenjivu $page, onda mogu da uvek prikažem jedan šablon koji sadrži kostur svih stranica, i includujem() specifičnu stranicu da prikažem glavni sadržaj. nešto kao:


Code:

// u php-u
$page='proizvod.tpl'; // ovo je naravno promenjivo..
$smarty->display('main.tpl');

// u šablonu main.tpl
<table>
  <tr>
    <td colspan=2>{include file='header.tpl'}</td>
  </tr>
  <tr>
    <td width=30>{include file='menu.tpl'}</td>
    <td>{include file=$page}</td>
  </tr>
  <tr>
    <td colspan=2>{include file='footer.tpl'}</td>
  </tr>
</table>


e, za drugi post, prvo da moraš na svakoj stranici kreirati novu instancu Smarty klase, ali recimo ovako kako sam ja stavio, možeš napraviti jednu smarty() funkciju koju ćeš includovati u svaku stranicu. (a prosleđivaćeš joj dva parametra, $page i $vars)

dalje, to što ti praviš je očigledno prikaz podataka iz baze, a za to se najčešće koristi {foreach} u kombinaciji sa id poljima. evo primera kako to izgleda sa foreach. (pisano napamet bez testiranja, ali bi trebalo da radi)

Code:

// u php-u
$rezultat=$kernel->upit($query);
$table=$rezultat->tabela;

// u šablonu
<table bla=...>
  {foreach from=$table item=row}
    <tr>
      {foreach from=$row item=column}
        <td>{$column}</td>
      {/foreach}
        <td><a href="InfoManifest.php?idM={$row.id}">podaci o bla..</a></td>
    </tr>
  {/section}
</table>


ako baš insistiraš na for-like petlji, onda pogledaj {section}. nažalost, nisam ga skoro uopšte koristio (malo je nezgodnije -- probaj pa ćeš videti) pa ti ne mogu baš mnogo pomoći sa njim..
[ bluesman @ 05.05.2003. 00:12 ] @
pa nije bas {section} tako komplikovan :-))

Evo najprostije, ako imas niz "$errors" i hoces da prikazes greske, kod je jednostavan:
Code:

{section name=err loop=$errors}
    {$errors[err]}<br>
{/section}


Malo je mozda cudno sto moras da dajes imena sekcijama, ali odmah se naviknes, odnosno uvek mozes da das isto ime ako nemas "ugnjezdene" sekcije.

Moze i komplikovanije:
Code:

{section name=l loop=$affiliatePayments}
    <tr>
        <td>{$affiliatePayments[l].pay_timestamp|date_format:"%b %d %Y"} </td>
        <td width=80 align=right>$<em>{$affiliatePayments[l].pay_amount_total|number_format:2}</em><br></td>
    </tr>
{sectionelse}
    <tr>
        <td colspan=2>no record of any previous payments</td>
    </tr>
{/section}


Gde se recimo {sectionelse} prikazuje u slucaju da je $affiliatePayments prazan. Ima mnogo primena, ali ne bih sada da gusim sa tim. Na kraju, sve pise u help-u.
[ -zombie- @ 05.05.2003. 02:20 ] @
pa dobro, ako nije težak, što ne odradi ovaj primer što je želela da ispisuje redni broj (ne preko id polja iz baze ;)

i ja sam hteo preko {section} da joj pokažem (uz help ništa nije teško), ali nisam skontao kako da štampam loop varijablu pošto se ona ne referencira preko $nešto, pa onda {loop} ne pali jel tako očekuje funkciju..

btw, ajde priznaj realno, da li si, i ako jesi koliko puta (u odnosu na {foreach}) koristio {section}...
[ bluesman @ 05.05.2003. 17:55 ] @
Pa ja nisam ni citao pazljivo njen post jer sam mislio da si odgovorio :-)

Nista lakse od toga, a ima i nekoliko nacina:

nacin 1:
Code:

{section name=customer loop=$custid}
    {$smarty.section.customer.rownum} id: {$custid[customer]}<br>
{/section}

output:
Code:

1 id: 1000<br>
2 id: 1001<br>
3 id: 1002<br> 


ovo moze i drugacije (ovoga nema u help-u)
Code:

{section name=customer loop=$custid}
    {%customer.rownum%} id: {$custid[customer]}<br>
{/section}


output je isti.

nacin 2:
index varijabla, index_prev, index_next

nacin 3:
loop varijabla

+ imas i total varijablu, da prikaze ukupan broj podataka

Ja ne znam da li moze biti lakse od ovoga? Ti si bese pisao neki clanak o Smarty-ju, mogao si bar da procitas help :-)
[ bluesman @ 05.05.2003. 17:57 ] @
Citat:
-zombie-:
i ja sam hteo preko {section} da joj pokažem (uz help ništa nije teško), ali nisam skontao kako da štampam loop varijablu pošto se ona ne referencira preko $nešto, pa onda {loop} ne pali jel tako očekuje funkciju..

Pa nije bas tako, procitaj help :-)

Citat:
-zombie-:
btw, ajde priznaj realno, da li si, i ako jesi koliko puta (u odnosu na {foreach}) koristio {section}...

Uvek i koristim samo {section}, ne znam da li sam neki put koristio {foreach} ;-)
[ -zombie- @ 05.05.2003. 21:02 ] @
(zombie sedi u ćošku i stidi se)

Citat:
bluesman:
Ja ne znam da li moze biti lakse od ovoga? Ti si bese pisao neki clanak o Smarty-ju, mogao si bar da procitas help :-)


heh.. me and my big mouth ;D priznajem, sam sam tražio..

nego, moraću stvarno da uzmem neki normalni format smarty man-a. koristim .chm verziju verziju jer sam navikao na nju kao mnogo bolji format.. (php man.chm kao najbolji primer, a od skora i mysql man), ali ne valja što je dokumentacija malo starija, od neke starije verzije smarty-ja.. hm.. možda ipak odem na pdf :(
[ ana @ 14.05.2003. 00:53 ] @
...malo sa zakasnjenjem ali da vam se zahvalim za pomoc!
na kraju sam ispis odradila ovako (nije mi uspelo ono sa row.id ?!)
Code:

{foreach from=$tabela item=row}
    <p>
      {foreach from=$row item=column}
        {$column}
      {/foreach}

     <br><A HREF="InfoManifest.php?idM={$row.idM}" TITLE="Podaci o Manifestaciji {$row.idM}"> Informacije o Manifestaciji {$row.idM} </A>
 <br><A HREF='Satnice.php?idM={$row.idM}' TITLE='Podaci o Manifestaciji {$row.idM}'> Satnica Manifestacije {$row.idM} </A>
       {/foreach} 

ako nije problem jel moze neko da mi napise kako bi to izgledalo sa sectionima (ja sam citala pre par dana onaj help,i jasno mi je za obican niz- ali tabelu nikako nisam uspela da ispisem,a probala sam na ovaj nacin:
Code:

<table>
{section name=red loop=$brredova}
    <tr>
    {section name=kolona loop=$tabela[red]}
        <td> {$tabela[red][kolona]} </td>
     {/section}
     </tr>
{/section}
</table>


Hvala unapred! :) Ana
[ ana @ 14.05.2003. 00:57 ] @
...ups :)
probala sam da jednom polju pristupam sa $tabela[kolona]
[ bluesman @ 14.05.2003. 03:41 ] @
imas array:
$categories = array ("cat_id" => 1, "cat_name" => "Kategorija", "cat_description" => "nesto trece")

onda napravios
Code:

{section name=cat loop=$categories}
    {$categories[cat].cat_id}
    {$categories[cat].cat_name}
    {if !empty($categories[cat].cat_description)}
        {$categories[cat].cat_description|escape:stripslashes}
    {/if}
{/section}


znaci {$ime_niza[ime_sekcije].ime_polja}

ako je jednodimezionalni niz, na primer $errors = array ("1", "2", "3", "4"); onda ides samo
Code:

{section name=err loop=$errors}
    {$errors[err]}<br>
{/section}


i opet je sistem isti {$ime_niza[ime_sekcije]}
[ -zombie- @ 14.05.2003. 04:01 ] @
ej, jedan kratak tip na koji si me sad podsetio sa ovim error[] nizovima..

elem, kad sam prošli/prvi put pravio dvojezični (višejezični, no..) sajt, počeo sam slično kao ti sa greškama.. (vrlo klasičan form validator)

Code:

if (!isset($_POST['username'])) {
    $errors[]='missing username';
}
if (strlen($_POST['password'])<6) {
    $errors[]='short password';
}
// ...


i naravno kod u templejtu sličan ovom u prethodnom goranovom postu..

ali kako onda da dobijem višejezičnost samo menjajući templejte.. hm..

ovako sam ja smilio, i mislim da je mnogo elegantnije..

Code:

    $errors['uname']=!isset($_POST['username'])
    $errors['pass']=(strlen($_POST['password'])<6);
// ...


samim tim, php kod je još kraći, a naravno, templejt sada sadži samu poruku o grešci, pa je prevođenje olakšano..

Code:

{if $errors.uname} 
  missing username<br>
{/if}     
{if $errors.pass} 
   password to short...
{/if}     
// ...


[Ovu poruku je menjao -zombie- dana 14.05.2003. u 14:36 GMT]
[ bluesman @ 14.05.2003. 12:29 ] @
Pa znas kako ja resavam greske (to je i onaj primer)... Sve sto procesiram, ako ima neka greska trpam u jedan globalni array, i onda samo proverim da li je taj niz prazan. Ako nije, ispisem sve greske. Pravio sam i komplikovaniju verziju gde cuva i podatke o polju koje je pogresno popunjeno, ali mozda je to preterivanje.

samo mislim da ce ti PHP prijaviti gresku kod
Code:

strlen($_POST['password'])<6

ako ti $_POST['password'] nije definisan.

zato sam napravio funkciju koja te stvari resava zauvek:
Code:

function getValue (&$variable, $default = "")
    {
    return isset($variable) ? trim($variable) : $default;
    }

pa zoves recimo sa
Code:

$password = getValue ($_POST['password'], "");


tako da samo proveravas da li je empty();

... opet smo pobegli od teme.
[ mist @ 13.08.2004. 10:02 ] @
Ljudi bre,

pa što niste rekli da ovo ne radi sa rezultatima MySQL querija. Tri dana se ubih pokušavajući da prikažem rezultate iz MySql querija, dok nisam iz zezanja pokušao da prebacim rezultate u običan 2D niz. Tek onda mi je uspelo da prikažem tabelu pomoću Smartyja. A bilo me blam da pitam, vidim vi sve kao super radite, sve vam to funkcioniše, a meni nikako da proradi...

Eto, dakle, ko se prvi put susreće sa Smartyjem - NARAVOUČENIJE:
Smarty {section} neće da prikazuje direktno rezultate MySQL queryja, nego mora sve da se pretvori prvo u običan dvodimenzionalni niz.
[ -zombie- @ 13.08.2004. 16:53 ] @
hm.. o čemu ti pričaš?

kakve direktne rezultate iz mysqla?

kakvo pretvaranje u kakav niz?
[ bluesman @ 13.08.2004. 23:28 ] @
Koliko ja kapiram covek je pokusavao iz tpl da radi neki mysq_fetch_array() ili nesto slicno. Da znas da moze i to, ali ne onako kako si ti to radio :-)
[ mist @ 15.08.2004. 14:37 ] @
Probao sam

php:
Code:

$result = mysql_query($query);
$smarty->assign('tabela', $result);
$smarty->display('main.tpl');


tpl:
Code:

{section name=mysec loop=$tabela}
{strip}
   <tr bgcolor="{cycle values="#eeeeee,#dddddd"}">      
      <td>{$tabela[mysec].Polje1}</td>
      <td>{$tabela[mysec].Polje2}</td>
{/strip}
{/section}
</table>


Medjutim nije islo dok nisam $result propustio kroz funkciju:

Code:

function sql2table ($dataset) {
    // Funkcija koja od mysql rezultata vraca tabelu (2D niz)
    $i=0;
    $j=0;
    while ($row = mysql_fetch_row($dataset)) {
        $j=0;
        foreach($row as $column) {
            $izlazni_niz[$i][$j] = $column;
            ++$j;
        }
        ++$i;
    }
    return($izlazni_niz);
}


A i posle toga nisam mogao da pristupam po imenima polja nego po numerickim indeksima.
[ bluesman @ 16.08.2004. 00:08 ] @
ok, ovo su pocetnicke greske, ako zelis mogu da ti pomognem:

- sto se mysql_query tice, $result nije nikakva tabela niti podaci vec tiop Resource, nesot kao ID linka ka rezultatima koji su bufferovani. U tvom slucaju je NISTA, odnosno nista upotrebljivo, bilo da si to radio sa Smarty ili bez Smarty.

Kao sto vidis, ti taj link prenosis u mysq_fetch_array() kako bi on znao iz kog buffera da cita podatke (oprosceno objasnjenje)

- sto se tice smarty coda u tpl, on je ok, jedino sto tvoj $tabela nije sadrzao ono sto si ocekivao pa zato nisi imao nikakv output.

- nije nenormalno sto ne mozes da pristupis tvom nizu preko asocijativnih kljuceva, zato sto si niz kreirao kao numericki: $izlazni_niz[$i][$j]

evo ti jednostavnijeg resenja:
Code:

$queryResource = @mysql_query ($queryString,$dbLink) or echo (mysql_error());
if ($queryResource)
    {
    for ($records = false; $aFetch = @mysql_fetch_array($queryResource); $records[] = $aFetch);
    }

ovo ti smesta sve u jedan array koji sam nazvao $records (ali mislim da sam negde ranije postovao ovaj kod), koji je zgodan za smarty, jer uz

$smarty->assign_by_ref ('tabela', $records)

mozes da pristupis tabeli onako kako si ti pristupio u TPL

Napominjem da su rezultati tipa koji ti navedes - default su BOTH, ali ja stavljam samo MYSQ_FETCH_ASSOC jer nije mnogo sporiji od numerickih a opet mozes da pristupis elementima po nazivima polja. Za razliko od MYSQ_FETCH_BOTH, nije dupliran (kod ...BOTH imas i numericke i asocijativne)

To je te - nadam se da ce ti pomoci.
[ bluesman @ 16.08.2004. 00:13 ] @
samo pazi sa $smarty->assign_by_ref () jer ako uradis novi query, prepisace ti prethodne rezultate u $records, tako da ces morati za vise querija da koristis $smarty->assign ();

kod rezultata bi trebao da pravis proveru koji je tip querija jer za UPDATE, DELETE... nemas nikakv output pa ti moze generisati gresku, pa tako proveris pre for petlje:

if (eregi("^SELECT ", $queryString)
|| eregi("^SHOW ", $queryString)
|| eregi("^EXPLAIN ", $queryString)
|| eregi("^DESCRIBE ", $queryString))

pa ako je true (znaci da je SELECT, SHOW, EXPLAIN, DESCRIBE) onda vracas output odnosno citas mysql_fetch_array(), u portivnom ne uzimas nista jer ga ni nema.
[ mist @ 16.08.2004. 08:07 ] @
Gorane,

Hvala ti mnogo na detaljnom objašnjenju. Moram da priznam da mi nije jasan uslov terminacije u onoj for petlji:
$records[] = $aFetch

Ali verujem da fercera.

Znam da nisam mogao da pristupim asocijativno nizu koji sam kreirao, samo sam napisao tako da ispada da nisam znao... semantika...

Koliko sam ja čitao PHP Doc, tamo kaže da je mysql_fetch_array radi isto što i mysql_fetch_both. Ali možda nisam u pravu.

Ne moraš da se maltretiraš da odgovaraš na ovaj post. Sve je jasno.
Hvala još jednom!
[ bluesman @ 16.08.2004. 13:30 ] @
Nije to uslov terminacije. To je kod koji se izvrsava na kraju petlje, uslov terminacije je $aFetch = @mysql_fetch_array($queryResource) a to znaci da kada mysq_fetch_array() vrati false - petlja se prekida.

mysql_fetch_array radi isto sto i mysql_fetch_both po defaultu, samo sto mozes da kod ...array() prenesec parametar MYSQ_FETCH_ASSOC, a onda radi isto sto i mysql_fetch_assoc()

kao i u vecini programskih/script jezika vecina stvari moze da se uradi na vise nacina.
[ valajbeg @ 31.03.2007. 14:32 ] @
Fakat, imali neko source od nekog sajta koji je pravljen uz pomoc smarty tempjejta?

pls? ne mogu nikako da vidim u cjelini kako to izgleda
[ dr ZiDoo @ 01.04.2007. 23:56 ] @
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 :)
[ valajbeg @ 02.04.2007. 00:02 ] @
dr ZiDoo
e svaka ti cast