Frage

Dies sollte (hoffentlich) eine ziemlich einfache Frage für einige von Ihnen zu beantworten.

ich eine Arbeits rekursive Menü aus einer mySQL Datenbank, jetzt mein Hauptproblem ist:

Was ist der beste Weg, um die URL zu erstellen? Ich würde es vorziehen, in dem Titel jeder Zeile wie / Eier / Milch / Speck / zu bringen. Eier sind Ebene 0 wie: Eier-0, Milch-1, Speck-2. Irgendwelche Ideen auf, wie man dynamicly Ausgang das?

ich ziemlich viel werde für das, was „cletus“, sagte ein paar Kommentare nach unten auf diese Frage: PHP / MySQL - Aufbau einer nav Menühierarchie

Aber ich brauche ein bisschen mehr Erklärung, wie es zu tun.

War es hilfreich?

Lösung

Es sei denn, Sie planen, Ihren Menübaum oft zu ändern, Pre-Speicher die erforderliche hierarchische URL für jeden Menüpunkt ist wahrscheinlich die einfachste (für Laufzeitauflösung, das ist).

Wenn Sie den Baum erwarten oft genug geändert werden, sagen lässt - über eine Web-Schnittstelle, dann wäre es einfacher, die Pfade zu erzeugen jedes Mal, wenn Sie das Menü zu lesen, etwa wie folgt:

 id | name   | parent
----+--------+-------
 0  | eggs   | NULL
 1  | milk   | 0
 2  | bacon  | 1
 3  | tomato | 0
 4  | lettuce| 1

foreach (query("SELECT * FROM menu ORDER BY parent ASC") as $row) {
  $menuitem = array_merge(array(), $row);
  $menuLookup[$menuitem['id']] &= $menuitem;
  if ($menuitem['parent'] == null) {
    $menuitem['path'] = "/" . $menuitem['name'];
    $menu[] &= $menuitem[];
  } else {
    $parent &= $menuLookup[$menuitem['parent']];
    $menuitem['path'] = $parent['path'] . "/" . $menuitem['name'];
    $parent['menu'][] &= $menuitem;
  }
}

ich nicht diesen Code gedebuggt haben, getestet nur auf Richtigkeit; -)

Andere Tipps

Nun, wenn Sie eine Hierarchie mögen, am beste Methode, die ich kenne „Modified Preorder-Baum-Traversal“ genannt wird, die im Detail beschrieben wird, in diesem Artikel Sitepoint, beginnt etwa in der Mitte.

Der wesentliche Unterschied von dem, was vorgeschlagen Guss ist, dass es ein bisschen mehr performant ist und viel einfacher, nur den Teil des Baumes holen Sie suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top