Mailinglisten-Archive |
Hallo Alex, (sorry Liste, wird jetzt ein wenig lang ...) > > Kuck Dir mein Teil an ... das basiert glaub ich auf dem Proggie ... > hmm wie umgehst du denn das? Wenn Du Dir vorstellst, das eigentlich nur die Methode ausgetauscht wird, mit der die Daten in das Array geschrieben werden, ist es ganz einfach ... ;-) > bzw wie kann man $Buffer darin einlesen > wenn in $Buffer das gleiche wie in in dem File steht ? Der Buffer liest ja nur zeilenweise bis End-Of-Line ... der ist nur fuer denn schlimmsten Fall der Faelle mit 4096 Zeichen lang ... naemlich eine Zeile mit soviel Zeichen ... Jetzt droesel ich Dir mal die Sache auf und sage, was ich ersetzt habe: > $fd = fopen($treefile, "r"); > if ($fd==0) die("treemenu.inc : Unable to open file ".$treefile); > while ($buffer = fgets($fd, 4096)) hab ich gestrichen ... > { > $tree[$cnt][0]=strspn($buffer,"."); > $tmp=rtrim(substr($buffer,$tree[$cnt][0])); > $node=explode("|",$tmp); dito. Den folgenden Block habe ich dann in die gaaaanz untenstehende Funktion gepackt, die sich selbst rekursiv aufruft und die Daten in das Array schreibt. > $tree[$cnt][1]=$node[0]; > $tree[$cnt][2]=$node[1]; > $tree[$cnt][3]=$node[2]; > $tree[$cnt][4]=0; > if ($tree[$cnt][0] > $maxlevel) $maxlevel=$tree[$cnt][0]; > $cnt++; So, und nun mal mein (gekuerzter) Codeblock, der statt dem Zeuch da oben im File steht: /* Datenbank oeffnen */ $linkid = mysql_connect($host, $user, $password); $db = mysql_select_db($database, $linkid); /* Startwerte */ $maxlevel = 0; $cnt = 0; /* Menupunkte rekursiv in das Array tree einlesen */ readMenuItems(0, 1); Die Funktion "readMenuItems" liest die Daten aus und und schreibt sie in das (globale) Array $tree ... das ist die Schnittstelle zum Rest von PHPMenu ... So, nun die Funktion: ##### Funktion ##### /* rekursives Auslesen des Site-Menus */ /* die Daten werden in ein Array eingeordnet */ function readMenuItems($nodeid, $position) { global $tree; global $cnt; global $maxlevel; $rs = mysql_query("SELECT * FROM h_menu WHERE nodeid = $nodeid ORDER BY mnutitle"); /* Durch die Leafs gehen und Daten einlesen */ while ($data = mysql_fetch_array($rs)) { $tree[$cnt][0] = $position; //Einrueckung $tree[$cnt][1] = $data["mnutitle"]; $tree[$cnt][2] = $data["mnuurl"]; $tree[$cnt][3] = "content"; // Zielframe $tree[$cnt][4] = 0; if ($tree[$cnt][0] > $maxlevel) $maxlevel=$tree[$cnt][0]; $cnt++; /* Haengt ein Leaf am Leaf? einfach mal rekursiv runtergehen und nachkucken ... */ readMenuItems($data["mnuid"], ($position + 1)); } /* Fallback aus der Rekursion */ return; } ##### Funktion ENDE ##### Na, den Codeblock mit $tree wiedererkannt? Wichtig ist auch noch die Datenbanktabelle ... die muss noch ein Feld haben, in dem die ID des Vorgaengerknotens drinsteht ("nodeid") ... Ein Zip-File mit dem Teil (reimt sich ... :-) ) findest Du unter http://multimed1.fh-reutlingen.de/newweb/files/explorermenu.zip So, das wars jetzt aber ... hoffe geholfen zu haben ... Bye, Martin ______________________________________________________________________________ Diese Nachricht besteht zu 100% aus chlorfrei gebleichten, gluecklichen und zufriedenen Elektronen Martin Fenn palim_(at)_augusta.de martin.fenn_(at)_student.fh-reutlingen.de ______________________________________ http://www.augusta.de/~palim /\ /\ | / \/ \ |--- _____________________________/ \| LOOK: http://multimed1.fh-reutlingen.de
php::bar PHP Wiki - Listenarchive