Location: PHPKode > projects > Content*Builder > contentbuilder/system/fileTree.class.php
<?php

class FileTree {
	var $tree = array();
	
	// Array enthält für jeden Schlüssel (fid) als Wert die Strukturtiefe...
	var $flatStructure = array();
	// Array, dass für jede fid die Mutter anzeigt.
	var $parentStructure = array();
	var $limitStructure = 0;
	
	var $openThisNode = array();
	var $nodeName, $nodeID, $nodeSpace = array();
	
	function FileTree() {
		// Konstruktur initialisiert die Rubrikenspeicherung
		
		$select = mysql_query("SELECT name, branchID, parentID, SUBSTRING(status,5) as status, SUBSTRING(status,2,3) as sort, module, parameter FROM ".TABLE."_mm_folder ORDER BY sort, name ASC");
		while($fquery = mysql_fetch_array($select)) {
			$status	  = $fquery['status'];
			$branchID = $fquery['branchID'];
			
			$this->flatStructure[$branchID]   = $status;
			$this->parentStructure[$branchID] = $fquery['parentID'];
			
			// Speicherung der Struktur und aller Werte der aktuellen Rubrik in einem Array
			foreach($fquery as $k => $value) {
				$this->tree[$status][$branchID][$k] = $value;
			}
			if($status > 1) {
				// wenn Status > 1, dann ist es eine Unterrubrik
				// Errechnen des letzten Levels
				$lasti = ($status - 1);
				if(empty($this->tree[$lasti][$fquery['parentID']]['children'])) {
					// wenn das Feld children von der Mutter leer ist, 
					// dann ist dieses das erste Kind
					$cnr = 1;
					// Anzahl der Kinder wird gespeichert
					$this->tree[$lasti][$fquery['parentID']]['children'] = 1;
				} else {
					// wenn nicht, dann ist dieses das Kind Nummer LetztesKind + 1
					$cnr = $this->tree[$lasti][$fquery['parentID']]['children'] + 1;
					// Anzahl der Kinder wird gespeichert
					$this->tree[$lasti][$fquery['parentID']]['children'] = $cnr;
				}
				// Hier werden der Mutter die Kinder angehangen
				$this->tree[$lasti][$fquery['parentID']]['child'.$cnr] = $branchID;
			}
		}
	}
	
	function printTree($branchID, $name, $level) {
		$this->nodeName[]  = $name;
		$this->nodeID[]    = $branchID;
		$this->nodeSpace[] = $level * 10;
	}
	
	function getOpennodes($opennode) {
		$this->limitStructure = 1;
		$this->openThisnode[$opennode] = "1";
		$thisLevel  = $this->flatStructure[$opennode];
		$thisMother = $this->parentStructure[$opennode];
		if(($thisLevel - 1) > 0) {
			$this->getOpennodes($thisMother);
		}
	}
	
	function getTree() {
		// Die erste Ebene der Rubriken Struktur wird abgerufen und durchlaufen
		if(is_array($this->tree['1'])) {	
			while(list($key, $value) = each($this->tree['1'])) {
				// Übergabe dieses Elements an printTree()
				$this->printTree($key, $this->tree['1'][$key]['name'], 1);
				// Herausfinden, ob Kinder existieren			
				$children = $this->tree['1'][$key]['children'];
				if(!empty($children)) {
					// wenn Kinder existieren, dann diese ausgeben
					if(!empty($this->openThisnode[$key]) OR $this->limitStructure == 0) {
						$this->getChildren($children, '2', $key);
					}
				}
			}
		}
	}
	
	function getChildren($cnr, $level, $mother) {
		$lastLevel = $level - 1;
		$nextLevel = $level + 1;
		
		// Schleifendurchläufe = Kinderzahl
		for($z = 1; $z <= $cnr; ++$z) {
			// Schlüssel (fid) des jeweiligen Kindes
			$key = $this->tree[$lastLevel][$mother]['child'.$z];

			$this->printTree($key, $this->tree[$level][$key]['name'], $level);
			
			// Rekursive Abfrage der Kinder
			$children = $this->tree[$level][$key]['children'];
			if(!empty($children)) {
				if(!empty($this->openThisnode[$key]) OR $this->limitStructure == 0) {
					$this->getChildren($children, $nextLevel, $key);
				}
			}
		}
	}
}
?>
Return current item: Content*Builder