PHP Script / Dynamisches TreeView Menü

Hannibal

Erfahrenes Mitglied
Hallo

Hat jemand zufällig bereits ein solches Script erstellt oder weiss jemand, wo eines zum verändern zu Verfügung steht? Mit Icons etc.?

Ich suche ein PHP script, welches mir mein ganzes Menü aus der Datenbank lesen kann und dieses Menü im TreeView-Style ausgibt.

Gruss
 
hi,

Absolut genial und unter GPL:
WebFX XLoadTree

Damit sind auch dynamische Trees möglich. Das heisst: bei Klick auf einen Verzeichnisbaumordner wird eine xml-Datei angefordert (die man selbstverständlich auch per php erstellen kann). Somit sind auch sehr große Trees in kurzer Ladezeit verfügbar (Ich hab einen mit ca 15.000 Treenodes).

Mit IE wird ein ActiveXControl angelegt (im Internet bei immer mehr Usern abgeschaltet). Mit Mozilla geht das ohne ActiveX.

cu

crazyPower
 
nein,

du gibst die xml-datei aus (sie existiert nur temporär). Hier mal ein Beispiel:

PHP:
<?php
    //getxml.php
    //ID wird als Get-Parameter übergeben
    	$id=$_GET['i'];
    //DB Verbindung! Hier: Oracle-DB
    	$conn = OCILogon(USER, PASS, DB);
    //Select Statement
 	$sel = "select eqnum, description ,parent ,children, from db_table WHERE parent = '".$id."' ORDER BY description ASC";
    //Select vorbereiten
    	$stmt=OCIParse($conn, $sel);
    //Select ausführen
    	OCIExecute($stmt);
    //Ergebnis in $result speichern, $nrows enthält die anzahl der gefetchten Zeilen
    	$nrows = OCIFetchStatement($stmt, $result);
    
    //Standard XML-file, wenn keine Daten gefunden wurden
 	$xml = "<tree><tree text=\"ERROR: xmlfile not found for EQ $id\" /></tree>";				 
    		if ($nrows>0){
    		//define the XML File
    //Wurzelelement des XML-Files
    		$xml="<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n";
    		$xml.="<tree>\n";
    
    //Für jede Ergebnis-Zeile.....
    			for ($i=0; $i<$nrows; $i++){
    //Wenn das Element keine Kindelemente hat, diesen Node schreiben
    			  if ($result['CHILDREN'][$i]!='J'){
 			 $xml.="\t\t<tree text=\"".htmlspecialchars($result['DESCRIPTION'][$i], ENT_COMPAT, "ISO-8859-1")."\" action=\"../liste1.php?eqnum=".$result['EQNUM'][$i]."\" target=\"_blank\" />";
    			  }
    //ansonsten diesen hier:
    			  else{
 			 $xml.="\t\t<tree text=\"".htmlspecialchars($result['DESCRIPTION'][$i], ENT_COMPAT, "ISO-8859-1")."\" action=\"../liste1.php?eqnum=".$result['EQNUM'][$i]."\" target=\"_blank\" src=\"getxml.php?i=".$result['EQNUM'][$i]."\" />";
    			  }
    			}
    //Wurzelement schließen
    		$xml.="</tree>\n";
    		}
    //DB verbindung abbauen
    	OCIFreeStatement($stmt);
    	OCILogoff($conn);
    //xmlfile senden
    	header("Content-type: text/xml");
    	header("Content-Disposition: attachment; filename=$id.xml");
    	echo $xml;
    
    ?>

aufgerufen wird das dann so:

HTML:
    ....
    tree.add(new WebFXLoadTreeItem("MeinBaum", "getxml.php?i=12345"));
    ....

HTH

cP
 
Hallo,

schau dir mal den Select an. Das beantwortet deine Frage.

das i=1234 erzeugt den obersten Treenode, quasi das hauptverzeichnis.

Angenommen das menu mit der id 1234 hat folgende kindelemente :456 (hat auch Kinder: abc und def) und 789

dann würde der baum so aussehen:

Code:
  1234
     |-- 456
     |	|-- abc
     |	|-- def
     |-- 789

setzt du i=456 werden alle Kinder des Elements 456 (kinder von 456: abc und def) geholt. Der Baum sähe dann so aus:

Code:
   456
      |-- abc
      |-- def

Verstanden

cu

cP
 
Hmm leider bin ich noch nicht ganz mitgekommen.
Wie müsste die Datebanktabelle aussehen, wenn ich folgendes Menü abbilden möchte:
Code:
  Firma
     |-- Empfang
     |	|-- News
     |	|-- Achriv
     |-- Personal
usw.
 
HTML:
       ID Description	 Children		 Parent
 1	 Firma		 J			 <leer>
 2	 Empfang	 J			 1 
 3	 News		 N			 2
 4	 Archiv		 N			 2
 5	 Personal	 N			 1


In ID steht die ID des Eintrags (im obigen Bsp. heisst dieses Feld eqnum)
In Description die Beschreibung
In Children, ob der Eintrag Kindelemente hat (Bool)
In Parent steht die ID des Elternelements.

So, jetzt aber die Birne einschalten.... Das artet ja zu einem kompletten Tutorial aus ;)

cu

cP
 
Hat das Script jemand im Einsatz? Ich habe versucht das mit meiner MYSQL Datenbank zum laufen zu bekommen, doch das ging nicht.

Was muss genau geändert werden um dieses Script auf MYSQL Umzuschreiben? Ich steh da wohl gerade ziemlich auf dem Schlauch :(

Bitte helft mir!
 
Zurück