Domanda

Questa dovrebbe (si spera) essere una domanda abbastanza semplice per alcuni di voi a rispondere.

Ho un menu ricorsivo funzionante da un database mySQL, ora il mio problema principale è:

Qual è il modo migliore per creare l'URL? Preferirei inserire il titolo di ogni riga come / uova / latte / pancetta /. Le uova sono di livello 0 come: uova-0, latte-1, pancetta-2. Qualche idea su come produrre questo in modo dinamico?

Praticamente vado per quello che " cletus " ha commentato alcuni commenti su questa domanda: PHP / MySQL - creazione di una gerarchia di menu di navigazione

Ma ho bisogno di qualche spiegazione in più su come farlo.

È stato utile?

Soluzione

A meno che non si preveda di modificare spesso la struttura del menu, la pre-memorizzazione dell'URL gerarchico richiesto per ciascuna voce di menu è probabilmente la più semplice (per la risoluzione di runtime che è).

Se ti aspetti che l'albero venga modificato abbastanza spesso, diciamo - attraverso un'interfaccia web, sarebbe più facile generare i percorsi ogni volta che leggi il menu, qualcosa del genere:

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

Non ho eseguito il debug di questo codice, l'ho testato solo per correttezza ;-)

Altri suggerimenti

Bene, se vuoi una gerarchia, sii il metodo migliore che conosco si chiama " Traversal Tree Preorder modificato " che è descritto in dettaglio in questo articolo di Sitepoint , inizia a metà circa .

La principale differenza rispetto a quanto suggerito da Guss è che è un po 'più performante e molto più semplice recuperare solo la parte dell'albero che stai cercando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top