URL: https://www.overclockers.at/coding-stuff/php_bitte_um_denkanstoss_fuer_tree_menu_212754/page_1 - zur Vollversion wechseln!
hi
ich bin sooo rostig
mache gerade eine tree/ ordner struktur. diese kann beliebig tief sein.
es wird einfach zu jedem ordner (kategorie) ein feld 'parent_id' gesetzt.
soweit alles klar. hab ich schon unzählige male gemacht.
neu ist nun: ich möchte das ganze als tree-view ausgeben. so wie zb. das ordner-fenster in windows.
ich stehe da aber gerade voll auf der leitung (vielleicht hilft ja das schreiben hier
wie soll ich das auswerten das ein tree-view entsteht.......
vielleicht hat ja jemand nen denkanstoß für mich.
TIA
gibts auch links in die rückrichtung, also weiß ein ordner auch wer seine childs sind?
nein. aber das schreiben hier hat geholfen.
ich hab jetzt einfach ne funktion die erstmal nur die root-categories (also ohne parent_id) ausliest und abarbeitet.
die zweite funktion sucht die childs jeder einzelnen kategorie und referenziert auf sich selbst.
fall's jemand mal sowas braucht:
Code: PHPfunction build_rt_tree () { global $db_name, $dbn_rt; unset($html); $sql = "SELECT rt_id, rt_titel FROM $dbn_rt WHERE rt_parent_rt_id='0' ORDER BY rt_titel"; rem($sql); $query = mysql_db_query($db_name, $sql) or print_error(mysql_error()); while ($row = mysql_fetch_array($query)) { $html .= "$row[rt_titel]<br>"; $subcat_prefix = ""; $html .= get_rt_subcategories($row[rt_id], $subcat_prefix); } return $html; } function get_rt_subcategories ($rt_id, $subcat_prefix) { global $db_name, $dbn_rt; $sql = "SELECT rt_id, rt_titel FROM $dbn_rt WHERE rt_parent_rt_id='$rt_id'"; rem($sql); $subcat_query = mysql_db_query($db_name, $sql) or print_error(mysql_error()); if (mysql_num_rows($subcat_query) > 0) { $subcat_prefix .= "-"; while ($subcat_row = mysql_fetch_array($subcat_query)) { $html .= "$subcat_prefix $subcat_row[rt_titel]<br>"; $html .= get_rt_subcategories($subcat_row[rt_id], $subcat_prefix); } } return $html; }
Mein Denkanstoß:
Code: PHP<?php class Foo { ... function draw() { echo /* title */; echo '<div style="margin-left:20px;">'; foreach($this->getChildren() as $c) $c->draw(); echo '</div>'; } ... } ?>
owned
Jo, hab zu lange gebraucht . Aber kann dir ja trotzdem noch dienlich sein, wenn du das in Klassen verpacken willst.
Würde bei Tree-Views (besonders in deinem Fall ) auf AJAX setzen. JQuery hat eine nette Implementation dafür.
Btw, je nach tiefe deiner Datenstruktur würde ich neben einer Parent-Child-Beziehung auch auf "Nested Sets" setzen. Beschleunigt das Auffinden des Node-Pfades oder der Kinder eines gesamten Asts ungemein.
in normalfall sind's maximal 3 ebenen. vorläufig für ca 5 hauptebenen. diese sind auch maximal in 3-4 weitere unterteilt.
also mehr aufwand als nutzen eigentlich. aber es soll ja benutzerfreundlich sein
(bin nicht der typ der in diesem fall die tiefe fix vorgeben will)
aber da du jquery jetzt schon 2x genannt hast, muss ich mir 'das' wohl mal ansehen ...
wenn ich deine 'nested sets' richtig interpretiere, dann hab ich das eh bereits vorgehesen. meinst du: jeder datensatz soll auch seinen gesamten pfad wissen?
trees mit jquery sind extrem einfach, solang du ned "fancy stuff" wie lazy loading willst
http://dev.mysql.com/tech-resources/articles/hierarchical-data.htmlZitat von Boguswenn ich deine 'nested sets' richtig interpretiere, dann hab ich das eh bereits vorgehesen. meinst du: jeder datensatz soll auch seinen gesamten pfad wissen?
hab den oben geposteten code inzwischen überarbeitet und auf eine einzelne funktion optimiert. geht eh ganz einfach
danke für deine tipps!
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025