[PHP] Loopen in Smarty

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik ben met een nieuwe site bezig, ditkeer (mijn eerste keer) gebruik ik Smarty als templateparser. Maar nu loop ik tegen een probleem aan waar ik echt niet uitkom.

Het zit zo:

Ik ben een nieuwspagina aan het maken, op de beginpagina van de nieuwssectie laat ik de 3 laatst toegevoegde nieuwtjes uit de database halen. Nu is het probleem dat ik geen idee heb hoe ik dat in smarty moet integreren.

Tot nu toe is dit mijn template:

code:
1
2
3
4
5
<ul> 
  {section name=news loop=$nieuws} 
    <li>{$nieuws[news].auteur}</li> 
  {/section} 
</ul>


En dit mijn PHP code:
PHP:
1
2
3
4
5
6
7
<?php 
    $S_nieuws = $wmd->sql->query( "Select n.*, l.* From nieuws AS n, leden AS l 
                                      Where n.auteur = l.id 
                                      Order By n.datum DESC 
                                      Limit 0,3" ); 
       $wmd->smarty->assign( "nieuws", $wmd->sql->fetch( $S_nieuws ) ); 
?> 


Echter.. dit werkt niet zoals het moet werken, ik zie alleen een aantal list-items staan, verder geen titel o.i.d. erbij.

Wie weet hoe ik dit wél moet doen? Op smarty.php.net vind ik verder ook niks, nouja, niks van hetgeen dat ik eigenlijk nodig heb.

Met vriendelijke groet,
Matthias Trip

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Als je je template "debugged" (dus {debug} in je template file zet) - heb je dan wel de juiste data in je "nieuws" variabele? :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
elevator schreef op maandag 01 augustus 2005 @ 22:47:
Als je je template "debugged" (dus {debug} in je template file zet) - heb je dan wel de juiste data in je "nieuws" variabele? :)
Als ik {debug} in mijn template zet en vervolgens uitvoer krijg ik netjes een debug popup.
De inhoud daarvan is o.a. dit:

code:
1
2
3
4
5
6
{$nieuws} Array (5)
id => 1
onderwerp => Test
bericht => Dit is k3i.nl testnieuws.. blah blah ...
auteur => 1
datum => 1123013253


Het blijkt dus wel te kloppen, daardoor ga ik denken dat ik de section verkeerd heb.
Maar jammer genoeg weet ik niet wat wel de goede mannier is.

Wie kan me een eindje opweg helpen? :)

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
ik weet niet precies hoe Smarty werkt, maar mij hebben ze altijd geleerd: Quote je named variablen.

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Verwijderd schreef op maandag 01 augustus 2005 @ 22:53:
Als ik {debug} in mijn template zet en vervolgens uitvoer krijg ik netjes een debug popup.
De inhoud daarvan is o.a. dit:
Dat lijkt me idd juist - nu zeg je dat je geen output krijgt - maar als je in de source kijkt zie je dan ook niets? Het valt me nl. wel op dat je auteur print maar dat je schijnbaar die niet joined maar enkel een auteur id ophaalt oid :)

Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Met een loop loop je dus door een array heen. Nu loopt smarty dus door een record heen..... Waarvan smarty niet eens weet welke velden het zijn aangezien een section een numerieke volgorde aan houdt.

$nieuws.auteur gaat het dus wel doen zonder een section....

[ Voor 14% gewijzigd door disjfa op 01-08-2005 22:57 ]

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Hmm, jij let beter op dan ik inderdaad :)
Ik ging er van uit dat hij een $arr[]['auteur'] voerde aan Smarty maar dat doet ie idd niet :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
elevator schreef op maandag 01 augustus 2005 @ 22:56:
[...]

Dat lijkt me idd juist - nu zeg je dat je geen output krijgt - maar als je in de source kijkt zie je dan ook niets? Het valt me nl. wel op dat je auteur print maar dat je schijnbaar die niet joined maar enkel een auteur id ophaalt oid :)
In de source staat verder ook niks geen output. Alleen maar <li> en </li> tag's.

Ik denk dat de fout dus in de section zit, de huidige section die ik in mijn template heb staat was om te proberen. Maar dat mocht helaas niet werken. :/

Het zal vast het geval zijn dat de section opbouw o.i.d. anders zal moeten zijn dan dat ik die op dit moment heb.
Met een loop loop je dus door een array heen. Nu loopt smarty dus door een record heen..... Waarvan smarty niet eens weet welke velden het zijn aangezien een section een numerieke volgorde aan houdt.

$nieuws.auteur gaat het dus wel doen zonder een section....
Daar heb je inderdaad een punt.

Maar dan is de vraag, hoe loop ik dan op een correcte mannier records uit de database? Want als ik bijv. bezig zal gaan met een forum of iets in die trend zal ik weer tegen dezelfde fouten oplopen, de fouten waar ik nu niet uitkom. ;(

[ Voor 29% gewijzigd door Verwijderd op 01-08-2005 23:02 ]


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Als je zorgt dat al je records aangeboden worden aan smarty ben je er, dus iets als:

$tpl->assign('nieuws', Array( Array('auteur' => 1), Array('auteur' => 2), Array('auteur' => 3));

zal het loopbaar maken voor het veld auteur. In jouw geval zal je je fetch() call moeten veranderen in een "fetchAll" ofzo die vervolgens alle record rows teruggeeft :)

Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

http://nl2.php.net/while http://nl2.php.net/foreach etc etc. :)

code:
1
2
while($row = mysql_fetch_assoc($query))
    $nieuws[] = $row;


Lees de pagina`s een keer door en en speel :)

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Voor zover ik Smarty ken (da's niet overderven veel) is een secion voor iets complexere bewerkinen, in dit geval ga ik er vanuit dat je mysql_fetch_(assoc|array) gebruikt dus heb je gewoon een hash-table (array in PHP) met een dimentie ($blah['iets_uit_db'] (jaja crappy voorbeeld er bij :p)). Het lijkt mij dus eenvoudiger om een {foreach} te gebruiken.
code:
1
2
3
4
5
<ul> 
  {foreach item=news from=$nieuws} 
    <li>{$news.auteur}</li> 
  {/foreach} 
</ul>


Als je er zeker van bent dat de resutaten uit je database kloppen, dat lijkt me wel het geval, moet dit gewoon werken.
Pagina: 1