25. november 2008 - 17:49
Der er
11 kommentarer
Forum med træstruktur
Hej, jeg står overfor at skal lave et forum med træstruktur, fx: Overskrift Underpunkt Endnu et underpunkt Underpunkt Jeg har læst mig igennem en del artikler og indlæg (bl.a. her på siden) og har fået lavet en glimrende start. Nu mangler jeg dog en måde at indsætte nogle "streger" for at øge overskueligheden, således at strukturen ser således ud: Overskrift |_Underpunkt | |_Endnu et underpunkt | |_Endnu et underpunkt | |_Endnu et underpunkt |_Underpunkt Er der nogle der kan gennemskue, hvordan det kan laves? Jeg udlover gerne flere points, hvis det er nødvendigt!
Annonceindlæg fra HP
25. november 2008 - 19:36
#1
Det gælder jo om at lave noget intelligent. For Overskrift er der ikke noget specielt med... Et underpunkt sal altid have |_ foran. "Udfordringen" er Endnu et underpunkt, for hvis der er en UNDERPUNKT under, så ska ldet jo være: "| |_" Hvis ikke, så skal det kun være: " |_"
25. november 2008 - 19:52
#2
Ja, det er jeg også kommet frem til. Men udfordringen kommer også, når der så er et ekstra underpunkt. Så skal det jo være "| | |_" Det er dét, jeg ikke lige kan gennemskue. Til information, så hentes det ud fra databasen vha. en rekursiv funktion.
25. november 2008 - 20:40
#3
En rekursiv funktion er nok ikke godt nok, da den ikke kigger fremad, men jo kun tilbage. Så du skal nok smide alle data i et array eller noget, og så lave en kontrol som tjekker fremad, for der skal jo kun | |, hvis der er underpunkter under et givent emne.
25. november 2008 - 21:23
#4
Hej, jeg tror ikke umiddelbart jeg forstår din løsning :) Min kode ser således ud (tyvstjålet fra et andet indlæg her på Eksperten): function show_replies($svarpaa=0,$indryk=0,$foerste=0){ if($foerste) $query = " id=$svarpaa "; else $query = " parent_id=$svarpaa "; $query_three = mysql_query("select * from forum where $query order by id asc") or die(mysql_error()); while($r1=mysql_fetch_array($query_three)){ $dato = $r1["date"]; $emne = $r1["name"]; $id = $r1["id"]; echo "<tr><td>"; for($i=0; $i < $indryk; $i++){ echo " "; } echo $emne . "</td></tr>"; show_replies($id,$indryk+1); } } echo "<table>"; echo "<tr><td><b>Svar:</b></td></tr>"; show_replies(); echo "</table>"; Kan du evt. give mig et par liniers kode til at starte på? :)
25. november 2008 - 21:42
#5
Nej, for jeg har ikke noget kode til det du ønsker. Jeg prøver bare at tænke lidt højt her. :o)
26. november 2008 - 00:23
#6
<ole> Hvis du har en tabel med felterne 'id', 'par_id' og 'tekst' - hvor 'par_id' er id'et på den post, den pågældende post knytter sig til ('parent id') - kan du gøre noget à la: function getHTML($aMenu, $nLevel=0) { $aRet = array(); $sPre = str_repeat("|", $nLevel); for ($i=0,$j=count($aMenu[$nLevel]); $i<$j; $i++) { $nId = $aMenu[$nLevel][$i]["id"]; $sTxt = $aMenu[$nLevel][$i]["tekst"]; $aRet[] = "<div>".$sPre."_".$sTxt."</div>"; if (is_array($aMenu[$nId])) { $aRet[] = getHTML($aMenu, $nId); } } return implode("", $aRet); } $sql = "SELECT `id`, `par_id`, `tekst` FROM `TABEL_NAVN`"; $res = mysql_query($sql) or die (mysql_error()); $aList = array(); while ($row=mysql_fetch_assoc($res)) { if (!is_array($aList[$row["parid"]])) $aList[$row["parid"]] = array(); $aList[$row["parid"]][] = $row; } print getHTML($aList); /mvh </bole>
26. november 2008 - 00:47
#7
Njaahh ... næsten =) function getHTML($aMenu, $parid=0, $nLevel=0) { $aRet = array(); $sPre = str_repeat("|", $nLevel); for ($i=0,$j=count($aMenu[$parid]); $i<$j; $i++) { $nId = $aMenu[$parid][$i]["id"]; $sTxt = $aMenu[$parid][$i]["tekst"]; $aRet[] = "<div>".$sPre."_".$sTxt."</div>"; if (is_array($aMenu[$nId])) { $aRet[] = getHTML($aMenu, $nId, $nLevel+1); } } return implode("", $aRet); } $sql = "SELECT `id`, `par_id`, `tekst` FROM `menu`"; $res = mysql_query($sql) or die (mysql_error()); $aList = array(); while ($row=mysql_fetch_assoc($res)) { if (!is_array($aList[$row["par_id"]])) $aList[$row["par_id"]] = array(); $aList[$row["par_id"]][] = $row; } print getHTML($aList);
26. november 2008 - 11:07
#8
Hej Ole, tak for svaret. Jeg kom lidt tættere på løsningen. Nu ser det dog således ud: _ Hovedpunkt |_ Underpunkt 1 | |_ Underpunkt 2 | | |_ Underpunkt 3 | |_ Underpunkt 4 Ud for Underpunkt 2, 3 og 4 er de første | i overskud, da det gerne skulle se således ud: _ Hovedpunkt |_ Underpunkt 1 |_ Underpunkt 2 | |_ Underpunkt 3 |_ Underpunkt 4 Kan du gennemskue en løsning på dette? :)
26. november 2008 - 14:04
#9
Ja, umiddelbart ville jeg mene, deres parent-id er forkert. Da jeg testede koden, mener jeg ikke, jeg fik fejl. Er på job og kan ikke teste ligenu
26. november 2008 - 14:46
#10
Jeg kan ikke umiddelbart se, hvordan parent-id skulle være forkert, da det jo bare blive hentet ud af databasen :) Hvis du får tid til at se på det ved lejlighed, ville jeg være meget taknemmelig. :)
18. august 2010 - 18:01
#11
Jeg må vidst hellere få lukket denne tråd ;-) Nogle, der vil have points?
Vi tilbyder markedets bedste kurser inden for webudvikling