Question

Cela devrait (espérons-le) être une question assez facile à répondre pour certains d'entre vous.

J'ai un menu récursif fonctionnel dans une base de données mySQL. Mon problème principal est le suivant:

Quel est le meilleur moyen de créer l'URL? Je préférerais que le titre de chaque rangée soit / oeufs / lait / bacon /. Les œufs étant de niveau 0 comme: œufs-0, lait-1, bacon-2. Des idées sur la façon de générer dynamiquement ceci?

Je vais à peu près chercher ce que "cletus" dit quelques commentaires sur cette question: PHP / MySQL - Création d'une hiérarchie de menus de navigation

Mais j'ai besoin d'un peu plus d'explications sur la façon de le faire.

Était-ce utile?

La solution

Sauf si vous envisagez de modifier souvent votre arborescence de menus, pré-stocker l'URL hiérarchique requise pour chaque élément de menu est probablement le plus simple (pour la résolution au moment de l'exécution).

Si vous vous attendez à ce que l'arbre soit modifié assez souvent, disons - via une interface Web, il serait alors plus facile de générer les chemins chaque fois que vous lisez le menu, quelque chose comme ceci:

 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;
  }
}

Je n'ai pas débogué ce code, je l'ai seulement testé pour son exactitude; -)

Autres conseils

Eh bien, si vous voulez une hiérarchie, la meilleure méthode que je connaisse est appelée "Traversée de l’ordre de modification de l’ordre préliminaire". Ceci est décrit en détail dans cet article de Sitepoint , commence à peu près à la moitié. .

La principale différence avec Guss est qu’il est un peu plus performant et beaucoup plus facile de ne chercher que la partie de l’arbre que vous recherchez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top