# PHP Script / Dynamisches TreeView Menü



## Hannibal (22. August 2005)

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


----------



## crazyPower (22. August 2005)

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


----------



## Hannibal (13. September 2005)

Also muss dafür eine xml Datei generiert werden per PHP und als Datei auf dem Server abgelegt werden?


----------



## crazyPower (13. September 2005)

nein,

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


```
<?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:


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

    cP


----------



## Hannibal (13. September 2005)

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




Damit ich diesen Bereich richtig verstehe. Das i=12345, steht das für das Hauptverzeichnis oder für einen ganzen Menübaum?


----------



## crazyPower (13. September 2005)

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:


```
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:


```
456
      |-- abc
      |-- def
```
 
  Verstanden

  cu

  cP


----------



## Hannibal (13. September 2005)

Hmm leider bin ich noch nicht ganz mitgekommen.
Wie müsste die Datebanktabelle aussehen, wenn ich folgendes Menü abbilden möchte:

```
Firma
     |-- Empfang
     |	|-- News
     |	|-- Achriv
     |-- Personal
usw.
```


----------



## crazyPower (13. September 2005)

```
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


----------



## Hannibal (4. November 2005)

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!


----------

