[PHP/MySQL] Zit vast met statisch uitklap menu

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb de volgende tabel genaamd 'tree':

Afbeeldingslocatie: http://www.danandan.luna.nl/tabel_tree.gif

Ik heb een functie geschreven waarmee ik een willekeurig deel van de tree naar het scherm kan schrijven:
PHP:
1
2
3
4
5
6
7
8
9
10
11
function display_tree($parent, $level) { 
   $result = db_query('SELECT node_id, node_name FROM tree WHERE node_pid = "'.$parent.'";', 0, 0); 

   while ($row = db_fetch_array($result)) { 
       echo str_repeat('&nbsp;&nbsp;',$level).$row['node_name']."<br>"; 
       display_tree($row['node_id'], $level+1); 
   } 
}

// Laat tree vanaf 'root' node zien
display_tree(0,0);

Dit geeft als output:
HTML:
1
2
3
4
5
6
7
8
9
root
  producten
    content management
      cool cms
      not so cool cms
    shopping cart
  diensten
  weblog
  contact

So far so good. Maar nu wil ik een tree laten zien die alleen uitgeklapt is tussen de root en de huidige pagina om weer bij de top te komen. Stel dat iemand naar http://www.mijnsite.com/pagina.php?id=7 ('content management') gaat. Dan wil ik laten zien:
HTML:
1
2
3
4
5
6
7
root
  producten
    > content management
    shopping cart
  diensten
  weblog
  contact

En als hij dan doorklikt naar id=9 ('cool cms') dan moet de tree zijn:
HTML:
1
2
3
4
5
6
7
8
9
root
  producten
    content management
      > cool cms
      not so cool cms
    shopping cart
  diensten
  weblog
  contact

Laatste voorbeeld. Als iemand op 'weblog klikt', moet de navigatie zijn:
HTML:
1
2
3
4
5
root
  producten
  diensten
  > weblog
  contact

Dit alles is afgeleid van de navigatie op http://www.ibm.com. Hieronder een screenshot van http://www-1.ibm.com/busi...us/industries/wholesale/:

Afbeeldingslocatie: http://www.danandan.luna.nl/ibm.gif

Nu ben ik begonnen met het schrijven van de benodigde code, maar ik zie door de bomen het bos niet meer:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Lees id uit querystring: $get_id
if (isset ($_GET['id'])) {
    $get_id = $_GET['id'];
} else {
    $get_id = $_SITE['rootnode_id'];
}

// Vraag de properties van $get_id op
$qry_get_props = "SELECT node_pid, node_name FROM tree WHERE node_id = '".$get_id."' LIMIT 1";
$res_get_props = db_query($qry_get_props, 1, 0);
$row_get_props = db_fetch_array($res_get_props);

// Vraag alle nodes op die dezelfde parent id hebben als $get_id
$gry_get_sis = "SELECT node_id, node_name FROM tree WHERE node_pid = '".$row_get_props['node_pid']."'";
$res_get_sis = db_query($gry_get_sis, 1, 0);
$num_get_sis = db_num_rows($res_get_sis);

// Vraag het pad op naar de rootnode:
//...

// Schrijf navigatie naar het scherm
//...

Ik zit er nu al uren op, zonder resultaat. Kan iemand mij op weg helpen?

Overigens, ik heb al vele GoT draadjes erop nagelezen, en in elke 'tree' verwante discussie verwijst iemand naar het artikel op sitepoint (Modified Preorder Tree Traversal). Dat artikel ken ik, maar wil desondanks met dit adjacency list model doorgaan. Ook heeft het downloaden van php scripts die dhtml functies vullen voor een dropdown menu me niet verder geholpen.

P.S: Trouwens -- is GoT de laatste dagen nu zo langzaam of is dat alleen bij mij?

[ Voor 19% gewijzigd door Reveller op 28-10-2006 15:04 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Als je er nou allemaal <ul's en <li's van maakt. Dus css lijsten en je geeft deze allemaal style="display: none;" mee in het begin. En je voorziet ze van wat id's kun je ze met JS uit laten klappen.

Anders moet je gewoon steeds de tree volledig uitlezen en een pijltje zetten als $_GET['node_id']==$row['id'] o.i.d.

[ Voor 31% gewijzigd door djluc op 09-04-2004 17:54 ]