[PHP] while loop en FastTemplate *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een probleem met een while loop in mijn script als ik het samen gebruik met templates. Hieronder staan twee pagina's als voorbeeld.

BEGIN nieuws.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
require ("verbinding.inc");
$Opdracht = "select * from `Nieuws`";
$Resultaat = mysql_db_query ($dbnaam, $Opdracht, $Verbinding);
while (list ($id, $titel, $text, $foto) = mysql_fetch_row($Resultaat)){
  $nieuws_titel= "<div class=\"paragraaf\">$titel</div>";
  if (!$foto){
    $nieuws_foto= "";
  }
  else{
    $nieuws_foto= "<div class=\"normaal\"><img src=\"foto/". $foto ."\" width=\"100\" height=\"62\"></div>";
  }
  $nieuws_text= "<div class=\"normaal\">$text</div><p />";
}
mysql_close ($Verbinding);

 include("class.FastTemplate.php3"); 
 $bestanden["nieuws"] = "nieuws.tpl"; 
 $myTemplate = new FastTemplate("."); 
 $myTemplate->define($bestanden); 
 $myTemplate->assign("NIEUWS_TITEL", $nieuws_titel);
 $myTemplate->assign("NIEUWS_FOTO", $nieuws_foto);
 $myTemplate->assign("NIEUWS_TEXT", $nieuws_text);
 $myTemplate->parse("OUTPUT", "nieuws"); 
 $myTemplate->FastPrint("OUTPUT");

EINDE nieuws.php.

BEGIN nieuws.tpl
code:
1
2
3
4
5
6
7
8
9
10
11
<html>
 <body>
  <table border="0" cellpadding="5" cellspacing="5" height="100%">
   <tr>
    <td valign="top">
     {NIEUWS_TITEL}{NIEUWS_FOTO}{NIEUWS_TEXT}
    </td>
   </tr>
  </table> 
 </body>
</html>

Einde nieuws.tpl

Het probleem is nu dat de while loop niet werkt. De pagina weergeeft alleen het nieuws met het hoogste id. Ik wil hebben dat al het nieuws dat in mijn database staat weergegeven wordt. Kan iemand mij helpen?

(class die ik gebruik voor de templates is "class.FastTemplate.php3")


-----
Ik heb even je code wat leesbaarder gemaakt mbv de [php] en [code] tag[ Voor 24% gewijzigd door Janoz op 29-03-2004 13:43 ]


Acties:
  • 0 Henk 'm!

  • flexje
  • Registratie: September 2001
  • Laatst online: 16:57

flexje

got-father

*hint: en als je nou is een gedeelte van je template parsing ook in je while loop zet? :P

ps: gebruik de [ code ] tags / [ php ] tag voor duidelijkere opmaak van je code...

[ Voor 33% gewijzigd door flexje op 29-03-2004 13:36 ]

"Try not to become a man of success but rather to become a man of value..."


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Loop je code nogmaals eens stap voor stap door en kijk waar je de fout in gaat. Er zijn op dit moment twee delen die fout gaan. Zou $nieuws_tekst aan het einde van de while lus alle texten bevatten, of alleen degene die in het laatste record werd uitgelezen?

Verder werkt je huidige template waarschijnlijk maar voor 1 record. Hoe je een repeterend onderdeel in je template opneemt zul je even moeten zoeken in de handleiding van fasttemplate.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zal eens kijken. Moet alle texten bevatten.

[ Voor 133% gewijzigd door Verwijderd op 29-03-2004 14:26 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Flexje, wat bedoel je met een gedeelte van je template parsing ook in je while loop zetten. Heb
code:
1
$myTemplate->parse("OUTPUT", "nieuws");
in de loop gezet maar dat werkt niet.

[ Voor 13% gewijzigd door Verwijderd op 29-03-2004 14:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nog gekeken en het werkt bijna.

index.php:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
   include("layout/class.FastTemplate.php3"); 
   $bestanden["home"] = "home.tpl";
   $bestanden["nieuws"] = "nieuws.tpl";
   $myTemplate = new FastTemplate("layout"); 
   $myTemplate->define($bestanden); 

   require ("verbinding/verbinding.inc");
   $Opdracht = "select * from `Nieuws`";
   $Resultaat = mysql_db_query ($dbnaam, $Opdracht, $Verbinding);
   while (list ($id, $titel, $text, $foto) = mysql_fetch_row($Resultaat)){
   $nieuws_titel= "$titel";
   if (!$foto){
   $nieuws_foto= "";
   }
   else{
   $nieuws_foto= "<a href=\"foto/". $foto .".html\">[img]\"foto/".$foto[/img]</a>";
   }
   $nieuws_text= "$text";

   $myTemplate->assign("NIEUWS_TITEL", $nieuws_titel);
   $myTemplate->assign("NIEUWS_FOTO", $nieuws_foto);
   $myTemplate->assign("NIEUWS_TEXT", $nieuws_text);
   $myTemplate->parse("NIEUWS", ".nieuws");

   }
   mysql_close ($Verbinding);

   $myTemplate->parse("OUTPUT", "home");
   $myTemplate->FastPrint("OUTPUT"); 

?>


home.tpl:

code:
1
2
3
4
5
<table border="0" cellpadding="5" cellspacing="5" height="100%">
<tr>
<td valign="top">{NIEUWS}</td>
</tr>
</table>


nieuws.tpl:

code:
1
2
3
4
<div class="paragraaf">{NIEUWS_TITEL}</div>
<div class="normaal">{NIEUWS_FOTO}</div>
<div class="normaal">{NIEUWS_TEXT}</div>
<br />


Dit is de code die ik nu heb. Door op regel 24 een puntje voor nieuws te zetten lukt het wel. Maar dan krijg ik de volgende fout:

Notice: Undefined property: NIEUWS in c:\inetpub\wwwroot\leefbaarhorst\layout\class.FastTemplate.php3 on line 299

Op regel 299 in het bestand class.FastTemplate.php3 staat:
PHP:
1
$this->$ReturnVar .= $this->parse_template($this->$val,$this->PARSEVARS);


Weet iemand wat ik hier moet aanpassen zodat het wel volledig werkt?

[ Voor 65% gewijzigd door Verwijderd op 29-03-2004 19:06 ]


Acties:
  • 0 Henk 'm!

  • blizt
  • Registratie: Januari 2003
  • Laatst online: 11-12-2024

blizt

Wannabe-geek

Waarschijnlijk (maar vind je code niet echt duidelijk (indenting anyone?)) komt die notice omdat je variable nog niet bestaat....
Dus dan zou je of voor je de lus in gaat al een waarde toe moeten kennen aan die variable, of eerst kijken of ie al bestaat met isset & als dat zo is met .'je, en anders zonder ;)

United we stand, and divided we fall


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zal eens kijken
Pagina: 1