XML Navigation mit PHP

david07

Mitglied
Hi,

ich habe mal wieder ein Problem mit einer Klasse. Mein Ziel: Eine mehr-ebige Navigation, die aus einer XML-Datei ausgelesen und mit PHP in eine <ul> Liste geschrieben werden soll (Per CSS wird daraus ein Dropdownmenu angezeigt).

Mein Problem ist nun, dass in der Function LoadSubXML die If-Schleife "if ($subid == $myMenu->parent)" nicht interpretiert wird. Ich verstehe absolut nicht warum. Wenn ich das ganze in dieser Funktion ohne die Schleife ausführe, zeigt er mir alle Navigationselemente. Also die Funktion arbeitet grundsätzlich.

Anbei der Code:

Klasse:
PHP:
class Navigation
 {
 var $anhang;

 function Navigation($anh)
    {
    $this->anhang = $anh;;
    }

 private function LoadSubXML($subid,$file)
    {
    $objNav = simplexml_load_file($file);

    foreach ($objNav->menu as $myMenu)
        {
        if ($subid == $myMenu->parent)
            @$out .= "<li><a href=\"index.php".$this->anhang."&mod=".$myMenu->ref."\">".$myMenu->title."</a>";
        }
    if (isset($out))
        return "<ul>".$out."</ul>";
    }


 private function LoadXML($file)    //Hauptmenu laden
    {
    $objNav = simplexml_load_file($file);

    foreach ($objNav->menu as $myMenu)
        {
        if ($myMenu->parent == 0)
            {
            @$out .= "<li><a href=\"index.php".$this->anhang."&mod=".$myMenu->ref."\">".$myMenu->title."</a>";
            @$out .= $this->LoadSubXML($myMenu->id,$file);
            }
        }
    return $out;
    }


 public function LoadNav($file)     //Hauptmenu ausgeben
    {
    $nav = $this->LoadXML($file);
    $pre = "<div class=\"menu\"><ul>";
    $end = "</ul></div>";
    return $pre.$nav.$end;
    }
}

Die XML-Datei:
HTML:
<?xml version="1.0" encoding="ISO-8859-1"?>
  <navigation>

    <menu>
    <id>1</id>
    <parent>0</parent>
    <icon></icon>
    <title>Schreibtisch</title>
    <ref>deskt</ref>
    </menu>

    <menu>
    <id>2</id>
    <parent>0</parent>
    <icon></icon>
    <title>Navigation</title>
    <ref>navigation</ref>
    </menu>

    <menu>
    <id>3</id>
    <parent>2</parent>
    <icon></icon>
    <title>Navigation 1-2</title>
    <ref>navigation</ref>
    </menu>

    <menu>
    <id>4</id>
    <parent>2</parent>
    <icon></icon>
    <title>Navigation 2-2</title>
    <ref>navigation</ref >
    </menu>


    <menu>
    <id>5</id>
    <parent>0</parent>
    <icon></icon>
    <title>Webseiten</title>
    <ref>page</ref>
    </menu>
  </navigation>

Vielen Dank schonmal im Vorraus
 
Habe nochmal einen anderen Lösungsansatz. Aber hiermit leider auch probleme. Wenn ich die XML-Daten zuvor in ein Array schreibe und das ganze anstelle von foreach mit einer einfachen for mache müsste es auch gehen. Jedoch zerhackt das Script die <Ul> Liste völlig.

Könnt Ihr da mal kurz drüber schauen? Ich finde den Fehler einfach nicht :(

PHP-Code:
PHP:
 public function LoadNav($file)     //Hauptmenu ausgeben
    {
    $objNav = simplexml_load_file($file);

    $p_cnt = count($objNav->menu);
    for($i = 0; $i < $p_cnt; $i++)
        {
        $nav[] = $objNav->menu[$i];
        }

    for($i = 0; $i < count($nav); $i++)
        {
        if ($nav[$i]->parent == 0)
            @$out .= "<li><a href=\"index.php".$this->anhang."&mod=".$nav[$i]->ref."\">".$nav[$i]->title."</a>";
        elseif ($nav[$i]->parent == $nav[$i]->id)
            {
            @$out .= "\n<ul>";
            for($j = 0; $j < count($nav); $j++)
                {
                if ($nav[$j]->parent == $nav[$i]->id)
                    @$out .= "<li><a href=\"index.php".$this->anhang."&mod=".$nav[$j]->ref."\">".$nav[$j]->title."</a></li>\n";
                }
            @$out .= "</ul>\n";
            }
        $out .= "</li>\n";
        }

Das ist die Ausgabe;

HTML:
    <div class="menu">
	<ul>
		<li><a href="index.php?sid=9pbpah22v9ulu69ngt7maqbm11&mod=deskt">Schreibtisch</a></li>
		<li><a href="index.php?sid=9pbpah22v9ulu69ngt7maqbm11&mod=navigation">Navigation</a></li>

			<ul>
				<li><a href="index.php?sid=9pbpah22v9ulu69ngt7maqbm11&mod=navigation">Navigation 1-2</a></li>
			</ul>
		</li>

			<ul>
				<li><a href="index.php?sid=9pbpah22v9ulu69ngt7maqbm11&mod=navigation">Navigation 2-2</a></li>
			</ul>
		</li>
		<li><a href="index.php?sid=9pbpah22v9ulu69ngt7maqbm11&mod=page">Webseiten</a></li>
		<li><a href="index.php?sid=9pbpah22v9ulu69ngt7maqbm11&mod=sys">Systemeinstellungen</a></li>

			<ul>
				<li><a href="index.php?sid=9pbpah22v9ulu69ngt7maqbm11&mod=sys">Systemeinstellungen</a></li>
			</ul>
		</li>

			<ul>
				<li><a href="index.php?sid=9pbpah22v9ulu69ngt7maqbm11&mod=sys">Systemeinstellungen</a></li>
			</ul>
		</li>
	</ul>
    </div>
 
Zurück