Layout i rekursiv funktion.
Nu har jeg efterhånden siddet og kigget på min skærm længe nok, og må nok sige at jeg har set mig blind på følgende:Jeg har lavet en klasse der henter indhold fra en database, og smider informationerne i et array. Så langt så godt.
Følgende funktion skal så tage hver enkelt felt fra mit array og gøre noget forskellige alt efter om der er punkter længere inde i mit array.
Funktionen der smider det hele ud ser nu ud som følgende:
function printtree_ver($tree, $site, $start = 0,$level=0)
{
for($i=0;$i<$level;$i++) {
$res .= " ";
}
if($site[$start] != "") {
$res .= "$level -".$site[$start]."<br>";
}
if(count($tree->childrens[$start])>0) {
$level++;
foreach($tree->childrens[$start] as $value) {
$res .= $this->printtree_ver($tree, $site, $value,$level);
}
}
return $res;
}
Som det ser ud nu kan jeg få et resultat ala:
($level, $start, $site[$start])
1 - 1 - Blog
2 - 5 - RSS Feed
2 - 12 - Arkiv
1 - 2 - Profil
2 - 16 - Om
3 - 11 - Curriculum Vitae
3 - 20 - Kompetencer
4 - 21 - Referencer
2 - 15 - Projekter
2 - 6 - Kontakt
1 - 3 - Publikation
2 - 18 - Artikler
2 - 19 - Kildekode
Men det resultat jeg gerne skulle få ud skulle gerne være sådan:
<a class="menuButton" href="#" onclick="return buttonClick(event, '1');" onmouseover="buttonMouseover(event, '1');">Blog</a>
<div id="1" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="$url\">RRS Feed</a>
<a class="menuItem" href="$url\">Arkiv</a>
</div>
<a class="menuButton" href="#" onclick="return buttonClick(event, '2');" onmouseover="buttonMouseover(event, '2');">Profil</a>
<div id="2" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="$url" onmouseover="menuItemMouseover(event, '16');">Om</a>
<a class="menuItem" href="$url\">Projekter</a>
<a class="menuItem" href="$url\">Kontakt</a>
</div>
<div id="16" class="menu">
<a class="menuItem" href="$url\">Curriculum Vitae</a>
<a class="menuItem" href="$url" onmouseover="menuItemMouseover(event, '20');">Kompetencer</a>
</div>
<div id="20" class="menu">
<a class="menuItem" href="$url\">Referencer</a>
</div>
<a class="menuButton" href="#" onclick="return buttonClick(event, '3');" onmouseover="buttonMouseover(event, '3');">Publikation</a>
<div id="3" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="$url\">Artikler</a>
<a class="menuItem" href="$url\">Kildekode</a>
</div>
Jeg har selv været igang med at løse det sådan, men sidder fast.
Problemet er;
Hvis level er 1, skal den lave:
<a href="#" onmouseover="buttonMouseover(event,'$start');">$site[$start]</a>
<div id="$start" class="menu" onmouseover="menuMouseover(event)">
Hvis level er 2, skal den lave:
- Hvis der er underpunkter til elementet:
<a class="menuItem" href="$url" onmouseover="menuItemMouseover(event, '$start');">$site[$start]</a>
- Hvis ikke:
<a class="menuItem" href="$url">$site[$start]</a>
Når alle punkter er kørt igennem, skal den lukke med </div> som vi åbnede ved level 1.
Herefter skal den så hvis der var underpunkter til noget i level 2, køre disse igennem.
(Det er faktisk her jeg sidder fast).
Først skal den oprette:
<div id="$start" class="menu">
($start er idet på det punkt vi fandt i level 2.).
Inden i dette div, gælder samme regler som i "level 2".
Jeg er sikker på det lyder meget underligt, og fuldstændig uforståeligt. Men har du andre måder at gøre det på, og stadig få samme resultat, eller noget andet så spørg endelig løs :)
Angående points, ved jeg ikke om det er skudt helt ved siden af. Dog hvis det viser sig at være en større opgave kan spørgsmålet eventuelt ende under opgaver og give et par håndøre.
På forhånd tak for hjælpen.
