Avatar billede Slettet bruger
01. marts 2005 - 10:44 Der er 1 kommentar og
1 løsning

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 .= "&nbsp;&nbsp;&nbsp;&nbsp;";
    }
       
    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.
Avatar billede Slettet bruger
01. marts 2005 - 15:03 #1
Nu har jeg vist næsten fat i det.
Dog kan jeg ikke helt finde en måde at kode mig ud af følgende:

Jeg får nu dette resultat ved submenuer:

<div id="16" class="menu">
<a class="menuItem" href="cv">Curriculum Vitae
</a>
<a class="menuButton" href="#" onclick="return buttonClick(event, '20');" onmouseover="buttonMouseover(event, '20');">guides|Guides
</a>
<div id="20" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="cv2">CV 2
</a>
</div>
</div>

Efter:
<a class="menuButton" href="#" onclick="return buttonClick(event, '20');" onmouseover="buttonMouseover(event, '20');">guides|Guides
</a>

Skulle den jo gerne afslutte det første </div>.

Et eksempel på både menu og resultat kan ses her:
http://cypermann.dk/pub/exp.php

Og kilden:
http://cypermann.dk/pub/exp.phps

Det er funktionen printtree_ver() der gerne skulle rettes lidt til.
Avatar billede Slettet bruger
01. marts 2005 - 21:11 #2
Efter at have googlet lidt rundt, fandt jeg en løsning på problemet.

Det kunne løses ved hjælp af simpelt css :)
Istedet for at bruge position: absolute; kunne jeg blot bruge position: fixed;

Det virker nu ganske fint, og er stadig valid xhtml.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester