[ spezia @ 15.03.2008. 10:19 ] @
Pocetnik sam sa smarty-jem.Radim primer gde sam 2 vesti upisao u bazu,i sada hocu da ih obe ,jedne ispod druge ispisem.
U mom primeru ispisuje samo jednu vest.Probao sam ,sa foreach,ali nisam uspeo.Tacnije nisam nasao dobar primer prikazivanja svih podata iz baze.
Meni treba nesto kao u FastTemplate klasi,blok ,a ne display (cela strana);
Znaci u bazi->tabela news,imam id,title,news,autor,date.

evo mog primera:
Code:

tpl:



<table width="100%" border="0" cellspacing="5" cellpadding="10">
      <tr>
    
        <th scope="col"><p class="style4">[[$TITLE]]</p>
          <div align="justify">[[$news]]
            <br />
            <span class="style7">[[$autor]]       </span><br />
            <span class="style6">[[$date]]</span></div></th>
    
      </tr>
    </table>



PHP:


<?php
include('MySmarty.php');
function prikaz()
{
    $smarty=new MySmarty();
    
                          
    $query=mysql_query("SELECT * FROM news");
    while($l=mysql_fetch_array($query)){
        $smarty->assign(array("TITLE"=>$l[title],
                               "news"=>$l[news],
                               "autor"=>$l[autor],
                               "date"=>$l[datenews]));
                        
    }
    $smarty->display("naslovna.tpl"); 
}
$link=mysql_connect('localhost','root','a');
    if($link){
        $db=mysql_select_db('turist');
        prikaz();
    }else{echo "Nije uspostavljena konekcija sa bazom";}
    
?>


[ Man-Wolf @ 16.03.2008. 12:15 ] @
Cini mi se da nisi stavio {section} ?! Tako da je logicno da prikaze samo prvi rezultat. Uglavnom, ovako bi trebao da ide kod:

Code:


tpl:
{section name=broj loop=$vesti}


Title: {$vesti[broj].title}
<br>
News: {$vesti[broj].news}
<br>
Autor: {$vesti[broj].autor}
<br>
Date: {$vesti[broj].datenews}
<br>

{/section}

PHP:


<?php
include('MySmarty.php');
function prikaz()
{
    $smarty=new MySmarty();
    
                          
    $query=mysql_query("SELECT * FROM news");
    while($l=mysql_fetch_array($query)){
        $result = $l;
    }
    $smarty->assign('vesti', $result);
    $smarty->display("naslovna.tpl"); 
}

$link=mysql_connect('localhost','root','a');
    if($link){
        $db=mysql_select_db('turist');
        prikaz();
    }else{echo "Nije uspostavljena konekcija sa bazom";}
    
?>


Sa ovakvim template-om ces dobiti rezultete ispisane jedan ispod drugog. A ti posle sredjuj izgled :-)
[ spezia @ 17.03.2008. 15:13 ] @
Kod mene ovo nece da proradi.
Ispisuje samo jednu vest od dve,i to samo prvo slovo od naslov,prvo slovo od tekst,prvo slovo od autor....
Code:

function prikaz()
{
    $smarty=new MySmarty();
    
                          
    $query=mysql_query("SELECT * FROM news");
    while($l=mysql_fetch_array($query)){
        $result = $l;
   //Kada sam radio sa FastTemplate klasom ovde ubacim dinamicki blok koji se ponavlja sve dok ima podataka u bazi.Sa smarty-jem sve je nelogicno ,a u dokumentaciji nikako da nadjem primer sa bazom.
    }
    $smarty->assign('vesti', $result);
    $smarty->display("naslovna.tpl"); 
}




[Ovu poruku je menjao spezia dana 18.03.2008. u 09:43 GMT+1]
[ dakipro @ 17.03.2008. 15:28 ] @
Nevezano za konkretan problem, vidim da uporno pokusavas da povezes smarty sa bazom, sto mu dodje nekako suprotno osnovnoj nameni smartyja da razdvoji prezentacionu logiku od logike za skladistenje podataka. Znaci smarty treba da radi sa gotovim podatcima (stringovima, nizovima ili objektima) nevezano odakle ih ti "vadis" dal iz baze, text fajla ili ih usput matematicki generises, tako da ti je mozda celokupna logika pristupa malo off-track.
Iskreno, koliko se secam, section je malo komplikovaniji za petlje (iako je jelte fleksibilniji) pa mozda nije lose da probas da koristis {foreach} ?
Mislim, ovo mu dodje "skolski" primer rada sa smartyjem, nema neke nauke... kreiras niz (bilo podatcima iz baze ili rucno) odstampas taj niz i proveris da li ima odgovarajuce clanove, prosledis ga smartiju, i u smartiju foreach petljom samo istampas krajnje vrednosti (kao sto bi ga php-om provrteo kroz petlju). Znaci korak po korak, redom stampas sadrzaj niza (koristeci recimo print_r()) i nemozes da pogresis... samo manual redom korak po korak...
[ bugsu @ 29.07.2009. 12:55 ] @
jel moguce izpisi iz baze sa smartijem ali posle svakog npr treceg ispisa da ubaci neki npr css

znaci

{section name=j loop=$categories}
{categories[j].name}
{section}

i on tako opali loop....nekih 20komada a meni treba posle 3 da ubaci css dash ...
izvodljivo ?
[ dakipro @ 29.07.2009. 14:19 ] @
moze sa foreach itteration, a verovatno moze i koriscenjem section, pogledaj manual.
Ali sigurno mozes staviti brojac na 0, svakim krugom ga povecati za 1, i kad dodje >2, resetujes na 0. Assign je funkcija
[ Man-Wolf @ 05.08.2009. 18:28 ] @
Jes malo zastarela tema, ali posto je ovo definitivno jedan od cescih 'problema' na koji se nailazi sa Smarty-jem, evo linka sa nekoliko vrsta resenja za ovaj problem (verovatno ce zatrebati nekom i kasnije ):

Smarty Columns Tutorial
[ gotivac @ 11.03.2012. 12:04 ] @
Jedno verovatno početničko pitanje, ali sa Smarty-jem sam početnik...

Imam problem sa ispisom "naših" slova iz baze...

Pokušavao sam da otkrijem o čemu se radi i na sledeći način:

u index.php napravim neki ispis bez pozivanja template-a, protrčim recimo kroz tabelu vesti i izbacim naslove, šđčćž se normalno prikazuju.
Code:

require "libs/Smarty.class.php";
require "libs/db.class.php"; // ovo nema veze sa smarty-jem i radi normalno bez korišćenja smarty-ja
$smarty=new Smarty();

// ovaj deo nema veze sa smarty-jem:
$db=new db;
$db->db_type="mysql";
$db->dir='cache';
$db->ttl=0;
$db->sql="SELECT * FROM vesti";
$db->fetch();
foreach($db->data as $row){
    echo $row['naziv'].'<br/>';
}


E, sada, ako samo dodam liniju iza svega ovoga:

Code:

$smarty->display("index.tpl")


, pri čemu index.tpl izgleda ovako:

Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link rel="stylesheet" href="css/main.css" type="text/css" />
<link rel="stylesheet" href="css/login.css" type="text/css" />
</head>

<body>
</body>
</html>

znači, nema ničega u njemu, onaj ispis od malopre prolupa i šđčćž više ne postoje...???

Da pojasnim, znam da se ne radi ovako, sa ovim echo u .php fajlu, ali sam to uradio samo probe radi, u realnosti pre pozivanja index.tpl postavim smarty varijable, odnosno popunim ih sadržajem, pa ih u index.tpl prikazujem, ali pošto gubim šđčćž, probao sam i ovako, na najjednostavniji mogući način i ništa...
[ dakipro @ 11.03.2012. 13:14 ] @
Pa bas zato imas problem jer koristis echo ispred <HEAD> taga u HTMLu, i onda browser postavi default head koji ne podrzava utf8 tj nasa slova.
Znaci ne smes pre

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

da imas bilo kakav output, inace ti nece raditi utf8 podrska.
Tako da ovo nije problem vezan za smarty
[ gotivac @ 11.03.2012. 20:12 ] @
Da pokušam da pojasnim, dakle kada je kod ovakav:
Code:

<?php
// load Smarty library
require("libs/Smarty.class.php");
require("libs/db.class.php");

$db=new db;
$db->db_type="mysql";
$db->dir='cache';
$db->ttl=0;
$db->sql="SELECT * FROM vesti";
$db->fetch();
foreach($db->data as $row){
    echo $row['naziv'].'<br/>';
}

$smarty=new Smarty();
$smarty->assign('content',$db->data);
$smarty->display('index.tpl');
?>


a template ovakav:

Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<h2>Ovde kreće ispis iz templejta a slova šđčćž se ovde vide normalno:</h2>

<p>
{foreach from=$content item=row}
        {$row.naziv}<br/>
        {/foreach}
</p>
</body>
</html>


Dobijem dva puta ispis (jedanput iz samog php-a, drugi put iz foreach petlje u templejtu) ali je na mestu dijakritika krš i lom, dakle, ne valja enkoding na oba ispisa.

Kada poslednju liniju u php fajlu obrišem ($smarty->display('index.tpl');), dobijem samo jedanput ispis iz php-a koji ima ispravan enkoding.
Dakle, čim pokrenem template enkoding sadržaja koji vučem iz baze mi ode do đavola.