Peter L.: Array mit Nested Set Werten zu Html-Liste/Menu verarbeiten

Beitrag lesen

Hey!

Weil das ein Wurzel-Blatt ist. Du prüfst bei Blättern auf das Eltern-Element. Da muss noch der Fall, dass der Stack leer ist, berücksichtigt werden.

Soll ich so tun?

  
$this->arrMenuItems = array(  
	array(	'leftkey'=> '0',  
		'rightkey'=> '5',  
		'name'=> 'foobar'),  
	array(	'leftkey'=> '6',  
		'rightkey'=> '11',  
		'menuName'=>'hauptmenu',  
		'name'=>'hauptmenu punkt1'),  
	array(	'leftkey'=> '7',  
		'rightkey'=> '10',  
		'menuName'=>'submenu2',  
		'name'=>'submenu2 punkt1'),  
	array(	'leftkey'=> '8',  
		'rightkey'=> '9',  
		'menuName'=>'submenu2',  
		'name'=>'submenu2 punkt2'),  
	array(	'leftkey'=> '14',  // oder z.B. 12  
		'rightkey'=> '15',  
		'menuName'=>'hauptmenu',  
		'name'=>'hauptmenu punkt2'),  
	array(	'leftkey'=> '16',  // oder z.B. 18  
		'rightkey'=> '19',  
		'menuName'=>'test',  
		'name'=>'hauptmenu punkt3')  
);  
  
$counter = count($this->arrMenuItems);  
for($i = 0; $i < $counter; $i++){  
	echo 'Name: '.$this->arrMenuItems[$i]['name']." - Level: ";  
	$arrParent = end($this->arrStack);  
	// Elter gefunden  
	if($this->arrMenuItems[$i]['leftkey']+1 < $this->arrMenuItems[$i]['rightkey']){  
		// Elter hat Kind  
		if(isset($this->arrMenuItems[$i+1]) && $this->arrMenuItems[$i+1]['rightkey'] < $this->arrMenuItems[$i]['rightkey']){  
			echo count($this->arrStack)." \n";  
			$this->arrStack[] = $this->arrMenuItems[$i];  
		// Elter hat kein Kind  
		}else{  
			if($this->arrMenuItems[$i]['leftkey'] > $arrParent['rightkey']){  
			  
				while($this->arrMenuItems[$i]['rightkey'] > $arrParent['rightkey'] && count($this->arrStack) != 0){  
					$arrParent = array_pop($this->arrStack);  
				}  
				echo count($this->arrStack)."\n";  
			}  
		}  
		continue;  
	}  
	// Blatt gefunden  
	if($this->arrMenuItems[$i]['leftkey']+1 == $this->arrMenuItems[$i]['rightkey']){  
		// Blatt hat Elter  
		if($this->arrMenuItems[$i]['rightkey'] < $arrParent['rightkey']){  
			echo count($this->arrStack)."\n";  
		// Blatt ist Elternlos und hat keine Kinder  
		}else{  
			$this->arrStack = array();  
			echo count($this->arrStack)."\n";  // sollte wohl immer 0 sein  
		}  
		continue;  
	}  
	echo 'hund';  
}

Scheint mal wieder alles zu funktionieren.