Rekursive Funktion + Array

Funjoy

Erfahrenes Mitglied
Hallo,
Ich habe ein kleines Problem bei einer rekursiven Funktion, diese Funktion dient dazu mein Menü auszugeben. Weill ich mit der Template Klasse Smarty arbeite kann ich den return wert nicht als string zurückgeben sondern als ein array und da ist dann auch das Problem.

Hier erstmal der aufbau von meiner DB=> jag_menu: siehe Anhang !

So nun zu der Funktion:
PHP:
<?php 
/* Menü Funktion
*  >> Eine Rekrusive Funktion um das Menü auszugeben.
*/
	function menu_ausgeben($ausrichtung,$zuordnung=0,$schluessel="") {
		global $db,$mysql,$user_ist_angemeldet;
		static $box;
		$menuquery = $db->sql_normal_query("SELECT 
												menuid,ausrichtung,sortierung,zuordnung,titel,name,fertiges_modul,pfad_zum_modul,modul,rechte
											FROM
												".$mysql['prefix']."_menu
											WHERE
												ausrichtung='".$ausrichtung."' AND zuordnung='".$zuordnung."'
											ORDER BY
												zuordnung,sortierung ASC");
		
		
		while($menu = $db->sql_fetch_object($menuquery)){
			//> Boxen ausgeben.
			if($menu->rechte != FALSE && $user_ist_angemeldet == TRUE) {
				#> Wird später definiert 
			} else if($menu->rechte == FALSE) {
				if($menu->titel == "ja" && $menu->fertiges_modul == "nein") {
					$box = array($menu->name => "");
				} elseif ($menu->titel == "ja" && $menu->fertiges_modul == "ja") {
					$box = array($menu->name => array(0 => "../".$menu->pfad_zum_modul));
				} elseif($menu->titel == "nein" && $schluessel !="") {
					$box[$schluessel] = array($menu->modul => $menu->name);
				} 
				
				menu_ausgeben($ausrichtung,$menu->menuid,$menu->name);
			}
		}
		
		return $box;
	}
?>

So mein Problem ist das er mir nich alles ausgibt sondern nur ein teil!
Habe mal print_r() angewendet und da sieht es dann so aus:
Array ( [Homepage] => Array ( [2] => Server Regeln ) )

sollte aber so aussehen:
Array([Login] => Array([0] => modul/templates/login.html),[Homepage] => Array([1] => Startseite, [2] => Server Regeln))

Hoffe irgendwer sieht den fehler in meiner Funktion :suspekt:

MfG Funjoy

Ps: Ich habe auch schon anstatt static$box; global$box; versucht macht kein unterschied. Ich glaube mal ich setzt die Rekrusive Funktion Falsch.
 

Anhänge

  • db_screen.jpg
    db_screen.jpg
    19,8 KB · Aufrufe: 45
Hallo,

so wird die Funktion an smarty weitergegeben.

PHP:
<?php 
/* Menu.
*  <1> Menu für die Linke Seite ausgeben.
*/
	$menu_links = menu_ausgeben("links");
	$smarty->assign("menu_links",$menu_links);
?>

MfG Funjoy
 
Hallo,

Habe die Lösung selber gefunden.

Der Fehler lag einfach daran das, dass Array $box immer wieder Übreschrieben wurde und bei den Inhalt von dem Array $box ebenfalls.

Die Lösung sieht also so aus:
PHP:
<?php 
/* Menü Funktion
*  >> Eine Rekrusive Funktion um das Menü auszugeben.
*/
	function menu_ausgeben($ausrichtung,$zuordnung=0,$schluessel="") {
		global $db,$mysql,$user_ist_angemeldet;
		static $box;
		$menuquery = $db->sql_normal_query("SELECT 
												menuid,ausrichtung,sortierung,zuordnung,titel,name,fertiges_modul,pfad_zum_modul,modul,rechte
											FROM
												".$mysql['prefix']."_menu
											WHERE
												ausrichtung='".$ausrichtung."' AND zuordnung='".$zuordnung."'
											ORDER BY
												zuordnung,sortierung ASC");
		
		
		while($menu = $db->sql_fetch_object($menuquery)){
			//> Boxen ausgeben.
			if($menu->rechte != FALSE && $user_ist_angemeldet == TRUE) {
				#> Wird später definiert 
			} else if($menu->rechte == FALSE) {
				if($menu->titel == "ja" && $menu->fertiges_modul == "nein") {
					$box[$menu->name] = "";
				} elseif ($menu->titel == "ja" && $menu->fertiges_modul == "ja") {
					$links['0'] = "../".$menu->pfad_zum_modul;
					$box[$menu->name] = $links;
				} elseif($menu->titel == "nein" && $schluessel !="") {
					$links[$menu->modul] = $menu->name;
					$box[$schluessel] = $links;
				} 
				
				menu_ausgeben($ausrichtung,$menu->menuid,$menu->name);
			}
		}
		
		return $box;
	}
?>

So das war es dann auch gg

MfG Funjoy

Achja Coola hilft meistens beim Denken *lol*
 
Zurück