Also folgendes, ich versuche im Moment eine etwas kompliziertere Navigation zu programmieren, die ich für meine Homepage benötigen werde. Habe mich damit jetzt auch schon einige Zeit beschäftig, komme aber irgendwie auf keinen grünen Zweig. Das Problem liegt, denke ich zumindest, darin, dass ich zwar die Einträge richtig aus der Datenbank bekomme, diese Daten aber nicht 'organisieren' kann.
Erstmal ein Beispiel:
Datenbankstrukur:
id - parentID - name
1 0 Baum1
2 0 Baum2
3 1 Ast1
4 1 Ast2
5 3 Blatt1
6 3 Blatt2
Wenn ich also auf den Link Blatt2 klick sollte das ganze später so aussehen:
Baum1
- Ast1
-- Blatt1
-- Blatt2 (selektiert)
- Ast2
Baum2
Diese Funktionen habe ich bis jetzt programmiert:
PHP-Code:
private function getLayerID($oldLayerID)
{
$queryStr = "SELECT parentID FROM navigation
WHERE ID = " . $oldLayerID . "
AND active = 1";
$result = $this->dbObject->getOne($queryStr);
$newLayerID = $result['parentID'];
if($newLayerID < 0)
throw new ExtException('Could not get layerID with this navigationID (' . $oldLayerID . ')',1);
return $newLayerID;
}
private function buildNavigationArrays($layerID)
{
$queryStr = "SELECT ID, name, source, parentID
FROM navigation
WHERE groupID = " . $this->groupID . "
AND parentID = " . $layerID . "
AND active = 1
ORDER BY sequence ASC";
$this->dbObject->query($queryStr);
$counter = 0;
while($row = $this->dbObject->nextRecord())
{
if($layerID != 0)
{
$this->subNavigationArray[$layerID][$counter] = $row;
$this->subNavigationArray[$layerID][$counter]['linkSource'] = $this->getLinkSource($row['ID']);
}
else
{
$this->navigationArray[$counter] = $row;
$this->navigationArray[$counter]['linkSource'] = $this->getLinkSource($row['ID']);
}
$counter++;
}
if($layerID != 0)
{
$layerID = $this->getLayerID($layerID);
$this->buildNavigationArrays($layerID);
}
}
Erläuterung: Als Startwert wirt nur die navID vom selektierten Link (hier: Baum2) verwendet. Die Funktion fängt also von hinten an und holt sich erst alle Blätter, dann die Äste und dann die Bäume ^^?
Das Problem ist, dass ich irgendwie nicht dahinterkomme wie ich diese Arrays wieder verknüpfen soll, so dass sie auch die richtige Struktur bei der Ausgabe ausbilden. Als Hinweis, hier soll noch keinerlei Html eingepflechtet werden, da ich für die Formatierung Smarty verwende/verwenden muss.
Ich hoffe ihr könnt mir weiterhelfen.
khromi