Hallo allerseits,
ich möchte aus einer XML-Datei (1) über eine php-Klasse (2) ein Array (3) erzeugen. In einen Array bekomme ich auch alles ganz gut, jedoch weiß ich nicht, wie ich in der Methode "buildMenuStructure" für die Kinder in eine tiefere Ebene des Array komme, so dass das Modell wie in 3 entsteht. Ich habe immer alle Menüelemente auf einer Ebene - die SubElemente sind also nicht als Children zugeordnet...
Ich hoffe, dass mich der eine oder andere verstanden hat und mir helfen kann! Wäre sehr geil
Viele Grüße,
André
1. XML-Datei
2. Ausschnitt der php-Klasse
3. gewünschter Aufbau des Array
ich möchte aus einer XML-Datei (1) über eine php-Klasse (2) ein Array (3) erzeugen. In einen Array bekomme ich auch alles ganz gut, jedoch weiß ich nicht, wie ich in der Methode "buildMenuStructure" für die Kinder in eine tiefere Ebene des Array komme, so dass das Modell wie in 3 entsteht. Ich habe immer alle Menüelemente auf einer Ebene - die SubElemente sind also nicht als Children zugeordnet...
Ich hoffe, dass mich der eine oder andere verstanden hat und mir helfen kann! Wäre sehr geil
Viele Grüße,
André
1. XML-Datei
PHP-Code:
<?xml version="1.0"?>
<menu>
<menuElement view="defaultview" url=""/>
<menuElement view="systems" url="?op=systems">
<menuSubElement view="systemgroups" url="?op=systemgroups"/>
<menuSubElement view="systemoverview" url="?op=systemOverview"/>
<menuSubElement view="addsystem" url="?op=addSystem"/>
<menuSubElement view="import" url="?op=import"/>
</menuElement>
<menuElement view="mylandscape" url="?op=mylandscape">
<menuSubElement view="personaldata" url="?op=personaldata"/>
<menuSubElement view="responsibilities" url="?op=responsibilities"/>
<menuSubElement view="subscriptions" url="?op=subscriptions"/>
</menuElement>
</menu>
PHP-Code:
public function buildMenuAsArray($whichMenu, $activeView) {
// Menueexistenz feststellen
if(!array_key_exists($whichMenu, $this->map)) {
die("The selected menu doesn't exist in the menuMap.");
}
// XML-Datei als DOM-Objekt einlesen
// :TODO: Datei-Existenz pruefen...
$this->menuDom = new domDocument();
$this->menuDom->preserveWhiteSpace = false;
$this->menuDom->load($this->map[$whichMenu]);
// Mit der ersten Menue-Ebene starten...
$highestElements = $this->menuDom->getElementsByTagName('menuElement');
foreach($highestElements as $highestElement) {
$this->buildMenuStructure($highestElement, $this->menu, $activeView);
}
}
private function buildMenuStructure($menuElement, $menu, $activeView) {
$active = ($menuElement->getAttribute("view") ==
strtolower($activeView)) ? true : false;
$gotChildren = $menuElement->hasChildNodes();
$this->menu[] = array('view' => $menuElement->getAttribute("view"),
'url' => $menuElement->getAttribute("url"),
'active' => $active,
'gotChildren' => $gotChildren);
if($gotChildren) {
$childElements = $menuElement->childNodes;
foreach($childElements as $childElement) {
$this->buildMenuStructure($childElement, $menu, $activeView);
}
}
}
PHP-Code:
$menu[menuItem][url] = "bla..."
[view] = "blubb..."
[active] = 1
[gotChildren] = 1
[childActive] = 1
[children][menuItem] ... usw. (alle SubElemente, Struktur wie oben) ...
Kommentar