PDA

Bekijk Volledige Versie : [PHP] Berichten weergeven volgens boomstructuur



Maarten Wierda
21/01/03, 21:25
Hallo N.I.W.S-S,

Ik heb geprobeerd een forum te maken n.a.v. een artikel op phpfreakz.nl
maar ik stuit op een probleem. De reacties moeten netjes geordend
volgens een boomstructuur. Het betreft een boomstructuur zoals deze
bijvoorbeeld in veel newsreaders wordt gehanteerd.

Op <http://www.norecess.com/tmp/forum/forum.phps> staat mijn broncode en
op <http://www.norecess.com/tmp/forum/forum.gif> staat een screendump
van de pagina die de berichten uit m'n database dient weer te geven.

De inhoud van m'n tabel ziet er als volgt uit:

+--------------------------------------+
| id | naam | titel | inhoud | replyto |
+--------------------------------------+
| 1 | 1 | 1 | 1 | 0 |
| 2 | 2 | 2 | 2 | 0 |
| 3 | 3 | 3 | 3 | 1 |
| 4 | 4 | 4 | 4 | 2 |
| 5 | 5 | 5 | 5 | 3 |
| 6 | 6 | 6 | 6 | 3 |
+--------------------------------------+

Nu dacht ik dat bericht 6 nu achter 3 zou moeten komen te staan, maar
zoals op de screendump te zien is gebeurt dat niet. Ook begrijp ik niet
waarom bericht 5 onder 2 staat, terwijl het als replyto 3 heeft staan.

Mijn idee was steeds dat het script kijkt naar de replyto en aan de hand
daarvan de berichten ordent. Indien ik iets verkeerd interpreteer, zou
iemand dan kunnen uitleggen hoe het script *wel* werkt?

Of kan het zijn dat er iets verkeerd gaat in m'n broncode,

Alvast vriendelijk bedankt,

--
Cheers, Maarten Wierda

Raginfury
24/01/03, 05:25
In article <3E2D9DD3.A8EA4008@norecessDOT.com>,
moart3nAT@norecessDOT.com says...

> Nu dacht ik dat bericht 6 nu achter 3 zou moeten komen te staan, maar
> zoals op de screendump te zien is gebeurt dat niet. Ook begrijp ik niet
> waarom bericht 5 onder 2 staat, terwijl het als replyto 3 heeft staan.

Dat is zeker vreemd, want ik heb je situatie nagebouwd en dan komt vijf
er in helemaal niet in voor met je script. Waarschijnlijk heb je gewoon
replyto op 2 staan bij 5, dubblecheck dat nog even.

Het missen van de andere kinderen komt door dit stukje code van je:

// dit is het laatste item, een leeg plaatje
if ($childcount == $count) {
$imgs_code .= $CODE_EMPTY;
}
// anders een lijntje
else {
$imgs_code .= $CODE_LINE;
PrintChildren($row->id, $imgs_code);
$count++;
}

Waarom check je alleen of een bepaald item een kind heeft als er nog
meer kinderen volgen? Je moet natuurlijk altijd checken of een item
kinderen heeft en dus moet je de aanroep van PrintChilderen() buiten
deze statement plaatsen:

// dit is het laatste item, een leeg plaatje
if ($childcount == $count) {
$imgs_code .= $CODE_EMPTY;
}
// anders een lijntje
else {
$imgs_code .= $CODE_LINE;
$count++;
}
PrintChildren($row->id, $imgs_code);

Er klopt dan waarschijnlijk geen hout meer van die plaatjes van je, maar
dat moet je maar zelf oplossen :)