Der Aufbau ist einfach.
@AnGSt $sql = select * from comments where newsId = 123 and parentId = 0 Order by date limit 0,7;
Danach verschachtelte div container mit dem Ergebnis erstellen und innerhalb des parent containers wird die getChild Methode aufgerufen. Jedes Child wird in den div container des parent integriert und das eben bis die maximale tiefe erreicht ist.
Die childfunktion ist abgetrennt von der ersten query welche die absoluten parents ausliest. Beim erzeugen der topparents wird kein linker border gesetzt. Erst innerhalb der getchild Funktion wird ein linker border genutzt.
Die tiefenvariable wird pro erfolgreichem Loop ingrementiert. Anhand der variable mit der aktuellen Tiefe wird eine Farbe ausgewählt. Jedes element hat ein linkes padding von 10. Das erzeugt die Tiefenstruktur.
Alle außer das toplevelelement haben einen linken border. Durch die verschachtelte integration der childs ergibt sich die konsistenz des linken borders. Das div wird höher mit jedem child. Selbiges passiert mit den childDivs innerhalb eines childs.
Das ausgegebene html sieht so aus:
Vorsicht Baustelle:
[objerror]Bild nicht mehr verfügbar (/img/icon_set/36.png)[/objerror]
[url=index.php?c=comments&parent=513#comment-513]Reply[/url]
<a class="c-17">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
# Hier wird getChild aufgerufen (noch innerhalb des parent divs):
# Identisches html, neu dazu kommt der linke border
# und das padding-left:10px; Das selbe Strukturprinzip wird innerhalb der
# getCHild Methode so lange gelooped bis die max Tiefe erreicht wurde.
# Der reply container wird anhand eines $_GETs in das betreffende div integriert
Es gibt mehrere Wege. Der aktuell von mir genutzte ist der ineffektivste da sehr viele einzelne queries abgeschickt werden können.
Ein Weg der die Anzahl an queries auf eine feste Größe schrumpft wäre noch recht einfach. (Mittelmaß) Wobei es dann immer noch recht viele werden können. max 7*7 bzw. bei einer Tiefe von 10, max 10*10 etc.
Die Profilösung setzt ein recht intensives Verständnis über nested sets vorraus.