Avatar billede grus Nybegynder
11. oktober 2008 - 13:24 Der er 9 kommentarer og
1 løsning

Træstruktur i debatforum

Jeg arbejder på et debatforum hvor emner og svar gerne skal stilles hierakisk op som fx
Emne 1
- Svar
-- Svar2
-Svar på svar 2
Emne 2
...osv

Har forsøgt med diverse træstrukturer, algoritmer og en masse andet men det duer ikke. Nogen forslag?
Avatar billede olebole Juniormester
11. oktober 2008 - 17:11 #1
<ole>

Giv hvert indlæg en 'id' og en 'parent_id' - så giver tingene mere eller mindre sig selv  =)

/mvh
</bole>
Avatar billede grus Nybegynder
11. oktober 2008 - 22:42 #2
Det har jeg skam allerede. Har svært ved at få ind hvordan jeg skal bruge den parentId til det formål.
Avatar billede grus Nybegynder
11. oktober 2008 - 23:16 #3
Ser lige jeg har skrevet min struktur forkert. Den skal være sådan:
Emne 1
- Svar 1 på emne 1
- - Svar på svar 1
- - - Svar2 på emne 1
- Svar 2 på emne 1

Håber det er forstpeligt
Avatar billede olebole Juniormester
11. oktober 2008 - 23:58 #4
Hvis du sorterer efter parent_id, når du henter fra MySQL, kan det vel dårligt gå galt. Jeg begynder at tvivle på, om jeg overhovedet forstår spørgsmålet  =)
Avatar billede grus Nybegynder
12. oktober 2008 - 00:10 #5
Den prøver jeg lige...muligvis har jeg formuleret mig upræcist. Vender tilbage hvis det fucker. Men forløbig tak
Avatar billede olebole Juniormester
12. oktober 2008 - 02:28 #6
Du kan prøve denne her:

function getMenuHTML($aMenu, $nLevel=0) {
    $aRet = array("<ul>");
    for ($i=0,$j=count($aMenu[$nLevel]); $i<$j; $i++) {
        $nId = $aMenu[$nLevel][$i]->id;
        $sTxt = $aMenu[$nLevel][$i]->text;
        $aRet[] = "<li><a href='page.php?id=".$nId."'>".$sTxt."</a>";
        if (is_array($aMenu[$nId])) {
            $aRet[] = getMenuHTML($aMenu, $nId)."</li>";
        }
        else $aRet[] = "</li>";
    }
    return implode("", $aRet)."</ul>";
}
function getMenu() {
    $sql = "SELECT * FROM `menu`";
    $res = mysql_query($sql) or die (mysql_error());
   
    $aMenu = array();
    while ($row=mysql_fetch_object($res)) {
        if (!is_array($aMenu[$row->parid])) $aMenu[$row->parid] = array();
        $aMenu[$row->parid][] = $row;
    }
    return getMenuHTML($aMenu);
}

print getMenu();
Avatar billede olebole Juniormester
12. oktober 2008 - 02:29 #7
*) tre felter: 'id', 'parid' og 'text'
Avatar billede grus Nybegynder
12. oktober 2008 - 03:00 #8
Det virker! Jeg kan ikke lige lure hvad der sker, men det kigger jeg selv på. Takker!
Er det noget med at du skal have nogle points eller noget? Har ikke prøvet dette forum før...
Avatar billede olebole Juniormester
12. oktober 2008 - 04:35 #9
Selvtak. Jeg lægger et svar, så du kan tildele points. Der er forøvrigt en udmærket lille FAQ om at være bruger på Eksperten:
    http://expfaq.dk/

Den kan man have megen nytte af, når man er helt ny  ;o)
Avatar billede olebole Juniormester
12. oktober 2008 - 16:08 #10
Tak for points  ;o)
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

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