Pregunta

Esta (con suerte) debería ser una pregunta bastante fácil de responder para algunos de ustedes.

Tengo un menú recursivo que funciona desde una base de datos mySQL, ahora mi problema principal es:

¿Cuál es la mejor manera de crear la URL? Preferiría incluir el título de cada fila como / eggs / milk / bacon /. Los huevos tienen nivel 0 como: huevos-0, leche-1, tocino-2. ¿Alguna idea sobre cómo generar esto de forma dinámica?

Estoy prácticamente por lo que '' cletus '' dijo algunos comentarios sobre esta pregunta: PHP / MySQL - construyendo una jerarquía de menú de navegación

Pero necesito un poco más de explicación sobre cómo hacerlo.

¿Fue útil?

Solución

A menos que planee modificar su árbol de menús a menudo, el almacenamiento previo de la URL jerárquica requerida para cada elemento del menú es probablemente la más fácil (para la resolución en tiempo de ejecución).

Si espera que el árbol se modifique con suficiente frecuencia, digamos, a través de una interfaz web, sería más fácil generar las rutas cada vez que lea el menú, algo como esto:

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

No he depurado este código, solo probé su corrección ;-)

Otros consejos

Bueno, si quieres una jerarquía, sé que el mejor método que conozco se llama '' Recorrido de árbol de preorden modificado '' esto se describe con gran detalle en este artículo de Sitepoint , comienza a mitad de camino .

La principal diferencia de lo que Guss sugirió es que es un poco más eficiente y mucho más fácil obtener solo la parte del árbol que estás buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top