• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kategorienbaum

Sunnyboy

Mitglied
Hallo zusammen

Ich versuche mit Nested Sets einen Kategoriebaum hinzubekommen.
Das Eintragen und als Tabelle wieder ausgeben (name, hierarchische position, parent) ist mir bisher auch gelungen.

Ich habe aber noch nicht herausgefunden, wie ich diese Infos nun in eine <ul><li> Struktur bringen soll.

Ich hoffe auf eure Hilfe!
Liebe Grüsse
Sunnyboy
 
Zuletzt bearbeitet:
Werbung:
Hallo
Ich habe in der Zwischenzeit viel gegoogelt und mir ein script zusammengeschnippselt. Es ergibt für alle Interessierten eine <ul><li> Darstellung aus dem Tutorial.

Der Code ist:
Code:
<html>

<head>
</head>
<body>
<?php
$user = 'username';
$pass = 'password';
$conn = new PDO('mysql:host=localhost;dbname=db_name', $user, $pass);
$sql ='SELECT * FROM table_name ORDER BY lft';
$stmt = $conn->query($sql);
$categories = array();
$left = array();
$right = array();
$level = 0;
while ($row = $stmt->fetchObject()) {
    if (empty($right) === false) {
        $lastRight = end($right);
        if ($lastRight > $row->rgt) {
            $level = $level + 1;
        }
    }
    if (empty($left) === false) {
        $lastLeft = end($left);
        if ($row->lft - $lastLeft > 2) {
            $level = $level - 1;
        }
    }
    $categories[] = array('id' => $row->id,
                          'name' => $row->name,
                          'level' => $level);
    $left[] = $row->lft;
    $right[] = $row->rgt;
}
echo '<ul>', "\n";
//anzahl Eintraege ermitteln
$count = count($categories);
//wenn nur ein Eintrag vorhanden ist (count == 1)
if ($count == 1)
    {
    echo '<li>', $categories[0]['name'], '</li>', "\n";  
    }
else
    {
    $i = 0;
    while (isset($categories[$i])) {
        echo '<li>', $categories[$i]['name'];
        if ($i < $count) {
            if ($categories[$i + 1]['level'] > $categories[$i]['level'])
            {
                echo '<ul>', "\n";
            }
            else {
                echo '</li>', "\n";
            }
            if ($categories[$i + 1]['level'] < $categories[$i]['level']) {
                echo str_repeat('</ul></li>' . "\n",
                                $categories[$i]['level'] - $categories[$i + 1]['level']);
            }
        } else {
            echo '<li>', "\n";
            echo str_repeat('</ul></li>' . "\n", $categories[$i]['level']);
        }
    $i++;
  }
}
echo '</ul>', "\n";
?>
</body>
</html>

Das ist zwar schön und gut, aber ich weiss leider nicht weiter, wie daraus eine Baumstruktur zu machen, die sich öffnen und schliessen lässt (Wie z.B. auf http://geoinformatik.htw-dresden.de...uebung/webbild/dom-inspector-baumstruktur.png).

Vielen Dank für hoffentlich zahlreiche Antworten :)
Sunnyboy
 
Zuletzt bearbeitet:
hallö,

also wenn es dir um die ul geht währe jquery wohl das einfachste.

alle li ab der 2 ebene auf Display none und bei klick auf ul alle folgenden li sichtbar.

cheffchen
 
Werbung:
Vielen Dank für eure Antworten.

Ich werde das ausprobieren. Bisher habe ich mit Javascript und ein wenig CSS etwas gebastelt, das relativ gut funktioniert. Sieht nicht so toll aus, aber erfüllt den Zweck eigentlich auch.

Nun dann, danke für den Input,
Sunnyboy

PS: Falls jemand am Quelltext interessiert ist, könnte ich das auch noch posten, ist aber ein wenig lang, wenn es niemand sehen will.
 
Zurück
Oben