menu de recursão hierárquica com PHP / MySQL
Pergunta
Isso deve (espero) ser uma pergunta muito fácil para alguns de vocês para resposta.
Eu tenho um menu recursiva trabalhar a partir de um banco de dados mySQL, agora meu principal problema é:
O que é a melhor maneira de criar a URL? Eu preferiria para trazer o título de cada linha como / ovos / leite / bacon /. Ovos estar nível 0 como: ovos-0, leite-1, bacon-2. Todas as ideias sobre como dynamicly saída isso?
Eu estou praticamente indo para o "cletus", disse alguns comentários para baixo sobre esta questão: PHP / MySQL - a construção de um menu nav hierarquia
Mas eu preciso de um pouco mais explicação sobre como fazê-lo.
Solução
Se você não pretende modificar a sua árvore de menu, muitas vezes, pré-armazenar o URL hierárquico necessário para cada item do menu é provavelmente o mais fácil (para o tempo de execução resolução que é).
Se você espera que a árvore a ser modificado muitas vezes, vamos dizer - através de uma interface web, então seria mais fácil para gerar os caminhos cada vez que você ler o menu, algo como isto:
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;
}
}
Eu não tenho depurado esse código, só foi testada-lo para correção; -)
Outras dicas
Bem, se você quiser uma hierarquia, ser o melhor método que conheço é chamado de "Modificado Preorder Árvore Traversal" que é descrito em grande detalhe neste artigo Sitepoint , começa a cerca de metade para baixo.
A principal diferença do que Guss sugerida é que é um pouco mais alto desempenho e muito mais fácil apenas para buscar a parte da árvore que você está procurando.
i escreveu algo em Groovy: http://blog.srvme.de/2009/11/29/reading-a-reflexive-association-in-a-recursive-way-for-grails-and- Groovy /