Toon posts:

[php] FastTemplate - Menu

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een website, ik maak gebruik van FastTemplate. Maar nou heb ik een probleem. Ik wil dus een menu maken, die in de database staat.
Dan haal ik alles uit de database, en flikker dat in $menuitems.
Deze stuur ik dan naar de FastTemplate-engine en het wordt afgedrukt. Perfect. Maar nou heb ik meer dan 1 menuitem, en dan druktie alleen de laatste af...
Dat moet dus niet...
Heeft iemand een idee hoe ik dit kan oplossen??

Hier de code:

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
//Basis van de tabel 
$menubasis = "<table border='0' width='100%' colspan='2'>
<tr><td width='100%' colspan='2'><p align='center' span class='menuhuidigClass'>{HUIDIGMENU}</td> 
</tr><tr><td width='100%' colspan='2'><hr align='left' noshade size='1' color='#FFFFFF'></td></tr>"; 


//Menu uit database halen 
$result0 = $db->query("SELECT * FROM tblMenu;"); 
    while($row0 = mysql_fetch_array($result0)){ 
        $menuid = $row0["MenuID"]; 
        $menutitel = $row0["Titel"]; 

$menuitems = "<tr><td width='25%' align='right'><li type='square' style='color : #FFFFFF'></li> 
</td><td width='75%' align='left'><a onfocus='this.blur();' href='./links.php?Subitemid=".$menuid."' title='Klik hier om naar ".$menutitel." te gaan...' 
span class='menuhoofditemClass' target='links'>".$menutitel."</a></td></tr></table>"; 
} 


//Array maken met gegevens voor de template 
$myTemplate->assign( array( 
                            '{MENUBASIS}'       =>      $menubasis, 
                            '{MENUITEMS}'       =>      $menuitems 
                          ) 
);

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

In de loop wordt steeds een nieuwe waarde aan $menuitems toegekend en deze wordt pas buiten de loop aan FastTemplate doorgegeven...

Resultaat: Alleen het laatste item wordt geprint

Verder lijkt mij dat het de bedoeling van een template is om inhoud/opmaak te scheiden. Hier geef je een heel blok HTML door aan FastTemplate, lijkt me niet de bedoeling. Verplaats dit zoveel mogelijk naar je template zelf.

Kijk even naar BLOCKS (ik geloof dat ze zo heten). Hiermee kan je een stuk van je template herhalen op basis van de gegevens die je als een array doorgeeft aan FastTemplate.

SIZE does matter.
"You're go at throttle up!"


  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

code:
1
2
3
  <!-- BEGIN DYNAMIC BLOCK: row -->
{MENU_ITEM}
  <!-- END DYNAMIC BLOCK: row -->


en dan met php:

PHP:
1
2
3
4
5
6
7
8
9
10
  $myTemplate->define_dynamic("row", "main");
  for (int $x=0;$x<rows;$x++) {
    $tpl->assign(
      array(
        'MENUBASIS' => $menubasis,
        'MENUITEM' => $menuitem
      )
    );
  }
  $myTemplate->parse(ROWS,".row");


you get the point...

Verwijderd

Topicstarter
ik snap et nog niet helemaal. Kan ik nou de rest van de code (database abstractie) nou ook zo blijven gebruiken?

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 13:09
code:
1
2
3
4
$result0 = $db->query("SELECT * FROM tblMenu;");  
    while($row0 = mysql_fetch_array($result0)){  
        $menuid = $row0["MenuID"];  
        $menutitel = $row0["Titel"];


Volgens mij loop je die array niet af. Of zijn die $menuid en $menutitel een array. Zo ja, dan kun je die niet gebruiken in je onderliggende code bij het HTML gedeelte. Anders moet je door die array doorlopen zoals hierboven met die for loop.

let the past be the past.


Verwijderd

Topicstarter
Dit is mijn Template-bestand (links.tpl)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
<title>Links</title>
</head>

<body background="./images/sub.jpg">
<link REL="stylesheet" TYPE="text/css" HREF="./css/layout.css">

<table border='0' width='100%' colspan='2'>
<tr>
<td width='100%' colspan='2'>
    <p align='center' span class='menuhuidigClass'>{HUIDIGMENU}</p></td>
</tr>
<tr>
<td width='100%' colspan='2'><hr align='left' noshade size='1' color='#FFFFFF'></td></tr>

{MENUITEMS}

</body>

</html>



Dit is het PHP-bestand (links.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
33
34
35
36
37
38
//Maak verbinding met database
$db = new database;
if(!$db->connect($DB_CONNECT));


//Selecteer template-bestand
$templates["links"] = "links.tpl";


//Locatie template-bestand opgeven, daarna wordt het toegewezen
$myTemplate = new FastTemplate("./template");
$myTemplate->define($templates);


//Menu uit database halen
$result0 = $db->query("SELECT * FROM tblMenu;");
    while($row0 = mysql_fetch_array($result0)){
        $menuid = $row0["MenuID"];
        $menutitel = $row0["Titel"];

$menuitems = "<tr><td width='25%' align='right'><li type='square' style='color : #FFFFFF'></li>
</td><td width='75%' align='left'><a onfocus='this.blur();' href='./links.php?Subitemid=".$menuid."' title='Klik hier om naar ".$menutitel." te gaan...'
span class='menuhoofditemClass' target='links'>".$menutitel."</a></td></tr></table>";
}


//Array maken met gegevens voor de template
$myTemplate->assign( array(
                           '{MENUITEMS}'       =>      $menuitems
                          )
);


//Template opbouwen
$myTemplate->parse("OUTPUT", "links");

//Template weergeven
$myTemplate->FastPrint("OUTPUT");


Wat moet ik nou precies veranderen dan? Ik vindt het een lastige zaak... Zou iemand mij a.u.b. kunnen helpen?

Verwijderd

Topicstarter
Kan iemand me helpen hiermee???

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

Behalve dat je html een beetje brak is (<p> in een <td> en 'm dan ook nogeens niet afsluiten) en je menu-item-html er ook niet zo zeer valide uitziet, is het eerste wat ik zo zie dat je in een loopje iedere keer $menuitems zet, het lijkt me dat je item wilt toevoegen aan de string, dus moet je iets als $menuitems .= 'blah'; doen. Wat je moet aanpassen om er zo'n block van te maken weet ik ook niet, zal vast wel in de readme van die templateparser staan?
oh en liever niet zo snel je topic kicken

Exact expert nodig?

Pagina: 1