lave et html_tree ud fra et sql udtræk.

Tags:    php

Hej udviklere!

jeg sidder og prøver at lave et html_Tree ud fra et sql udtræk.
jeg bruger udgaven fra pear
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test</title>
<link href="wishlist2.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="linkMenu.js"></script>
<script src="TreeMenu.js" language="JavaScript" type="text/javascript"></script>
</head>
<body>
<?
include("./inc/database/dbfunctions.inc.php");
connect();
require_once('HTML/TreeMenu.php');
$menu = new HTML_TreeMenu();
function getMenu( $parent, &$array, $level = 0, $submenu = 0 )
{
$sql = "SELECT pid, parent, page_name FROM pages WHERE status = '1' and parent = '$parent'";
$qh = fetch($sql);
if ( @mysql_num_rows( $qh ) > 0 )
{
while ($row = mysql_fetch_assoc($qh))
{
$array[] = $row;
getMenu( $row['pid'], $array, $level + 1, $submenu + 1 );
}
mysql_free_result($qh);
Return $array;
}
}
function test($array, $id=5) {
$icon = 'folder.gif';
$expandedIcon = 'folder-expanded.gif';
$menu = new HTML_TreeMenu();
$node1[$id] = new HTML_TreeNode(array('text' => "Referencer", 'link' => "test.php", 'expandedIcon' => $expandedIcon));
$i=0;
foreach($array as $item) {
echo($i);
$i++;
echo("<br>");
$nodel[$item['pid']] = &$node1[$item['parent']]->addItem(new HTML_TreeNode(array('text' => $item['page_name'], 'link' => "test.php?pid=".$item['pid'], 'expandedIcon' => $expandedIcon)));

}
$menu->addItem($node1[$id]);
$treeMenu = &new HTML_TreeMenu_DHTML($menu, array('images' => '/imagesAlt2', 'defaultClass' => 'treeMenuDefault'));
$treeMenu->printMenu();

}
$array = getMenu( 5, $array );
var_dump($array);
echo("<br>");echo("<br>");
test($array);
?>
</body>

</html>
/*
Output:

array(4) { [0]=> array(3) { ["pid"]=> string(2) "18" ["parent"]=> string(1) "5" ["page_name"]=> string(7) "Tømrere" } [1]=> array(3) { ["pid"]=> string(2) "21" ["parent"]=> string(2) "18" ["page_name"]=> string(21) "testen af under menus" } [2]=> array(3) { ["pid"]=> string(2) "19" ["parent"]=> string(1) "5" ["page_name"]=> string(9) "Akupuntur" } [3]=> array(3) { ["pid"]=> string(2) "20" ["parent"]=> string(1) "5" ["page_name"]=> string(9) "prøveside" } }

0
1

Fatal error: Call to a member function addItem() on a non-object in C:\\apachefriends\\xampp\\htdocs\\mediatest\\test.php on line 36

som man kan se kører den 2 gange, men når den skal tilbage efter at have tilføjet child elementet så dør den af en eller anden grund, laver jeg et udtræk der ikke henter childs kører den fint.
jeg kan simpelthen ikke se hvad pokker der er galt

håber en elelr anden kan se fejlen i min kode, eller har prøvet at lave et foldud/klapsammen træ fra et sql udtræk


bare for god ordens skyld vil jeg fortælle at jeg benytter mig af en parent/id struktur, altså parent indeholder information om hvem der er forældre til siden, og id'et er det aktuelle id på siden.



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato

Fejlen opstår i din test() funktion.

Du definere:
$node1[$id] = new HTML_TreeNode(array('text' => "Referencer", 'link' => "test.php", 'expandedIcon' => $expandedIcon));

Hvor $id er sat til 5 ovenfor.

i foreach loopet gør du følgende

$nodel[$item['pid']] = &$node1[$item['parent']]->addItem(new HTML_TreeNode(array('text' => $item['page_name'], 'link' => "test.php?pid=".$item['pid'], 'expandedIcon' => $expandedIcon)));

men $item['parent'] er kun 5 ved den første, ved nr. 2 udtræk er den 18. (nok det der er den egentlige fejl)

så efter du har kørt addItem() ved det første child, så tilføjer du pludselig det andet child til en helt anden menu (parent), den med nr. 18.

Da alle dine childs jo burde have 5 da, det er hvad du henter med getMenu(), så må det være denne getMenu() funktion der fejler.

Jeg kan ikke lige sige dig hvorfor, da jeg ikke ved hvad din fetch() funktion gør :)

For øvrigt ville jeg lige rette i din test funktion, så den checker om child elementets parent egentlig er det du tilføjer den til

Fold kodeboks ind/udKode 




Hilsen

Martin Dybdal (Dybber)



Opdagede lige fejlen i din getMenu() metode.

Når du udtrækker menupunkterne bruger du rekursion, så du også henter undermenuerne med.

Men du putter undermenuer ned i samme array som de andre. Deres parent bliver selvfølgelig anderledes.

Håber du forstår problemmet og kan finde en løsning ;)

Hilsen

Martin Dybdal (Dybber)



jeg fandt ud af problemet, det var en simpel dum fejl
det ene sted skriver jeg $node1 et andet sted skriver jeg $nodel det ene sted med et et-tal efter, det andet sted med et l efter
efter det blev rettet virker det.



t