basta fazeres uma query...obteres tudo o que queres na base de dados e ordenares/formatares como queres...
se tens dúvidas específicas posta
cumps
funcao menu(idpai) {
$resultado = dbquery("selecciona todos de menu onde IDPai = 'idpai'"); //vais ler os menus e guarda-los em $resultado
enquanto ($registos = $resultado) { //vais precorrer os menus
imprimir "<a href=$registo['link']>$registo['menu']</a>"; //vais imprimi-los
menu($registo['id']); //vais voltar a fazer isto tudo [B]mas[/B] para o idpai != 0, neste caso vai ler todos cujo o idpai na tabela seja o id do menu actual
}
}
menu(0);
Se forem só menus (sem sub menus) é simples. Como te disseram lês tudo. Depois, para cada registo (e cada registo tem o nome e o link) com um ciclo vais imprimir codigo:
equanto (houver registos) {
imprimir "<a href=$link>$menu</a>";
}
Se for com submenos arranjas mais dois campos na tabela: ID, IDPai. Atrvés de funções recrussivas e com javascript ou mesmo php chegas lá. Tornas o que está em cima numa funçao com um parametro. A primeira vez que a chamas vai com o parametro de idpai = 0 (menus principais) e dentro de cada volta do ciclo voltas a chamar a mesma funçao mas o parametro vai ser o o id do proprio.
Isto fica facilitado com hash mas isso tinha de voltar a ver como funiona. Como são só menus os queries à DB são poucos e leves mas é sempre bom fazer o minimo possivel pois nunca sabes quantos lá vao estar.
Isto é pseudo-codigo/algorito simples. Há mais para tornar isto mais eficiente e tudo isso.Código:funcao menu(idpai) { $resultado = dbquery("selecciona todos de menu onde IDPai = 'idpai'"); //vais ler os menus e guarda-los em $resultado enquanto ($registos = $resultado) { //vais precorrer os menus imprimir "<a href=$registo['link']>$registo['menu']</a>"; //vais imprimi-los menu($registo['id']); //vais voltar a fazer isto tudo [B]mas[/B] para o idpai != 0, neste caso vai ler todos cujo o idpai na tabela seja o id do menu actual } } menu(0);
exemplo:
tens a tebela:
id - idp - menu
1 - 0 - musica
2 - 0 - filmes
3 - 1 - rock
4 - 1 - blues
5 - 2 - accao
6 - 2 - comedia
vamos chamar a menu() passado 0:
menu(0);
a primeira coisa que faz é imprimir: <a>musica</a>;
Mas quando imprime isso volta a chamar a menu(), desta vez com 1 pois 1 é o id de registo "musica", entao:
menu(1);
Desta vez a primeira coisa que ele imprime é: <a>rock</a>; porque rock tem como idpai 1. Seguindo a mesma logico ele agora devia chamar outra vez a menu(). E chama com 3 mas como nao há registos cujo idpai = 3 ele nao vai imprimir nada. Então vai imprimir: <a>blues</a>; pois é o segundo registo e ultimo cujo idpai = 1.
E voltamos ao primeiro ciclo. Desta vez vai imprimir: <a>filmes</a>; que é o segundo registo de quando idpai = 0.
A coisa repetece para accao e comedia.
É confuso, sim, mas é util e "universal". Podes ter quantos menus e submenus que quiseres.
Se poderes facultares isso era um maximo.Fiz uma coisa em php que funciona bem com isso. Se precisares, diz.
EDIT: e que só faz um query à base de dados. Ou seja, é leve.
mysql_connect("localhost","root"); mysql_select_db("menu");
$res = mysql_query("select * from menu"); $ci = 0;
while ($rows = mysql_fetch_array($res)) {
$menu[$ci] = $rows;
$ci++;
}
function menu($pai,$menu) {
$ci = 0;
echo "<ul>\r\n";
while ($ci >= 0) {
if ($menu[$ci]['id'] != "" && $menu[$ci]['id'] != null) {
if ($menu[$ci]['idpai'] == $pai) {
echo "<li>"; echo $menu[$ci]['menu']; echo "</li>\r\n";
menu($menu[$ci]['id'],$menu);
}
$ci++;
}
else $ci = -1;
}
echo "</ul>\r\n";
}
menu("0",$menu);
Ok obrigadoAgora é só adaptadres isso à tua base de dados. Depois com uns css personalizas esses botoes todos.PHP:mysql_connect("localhost","root"); mysql_select_db("menu"); $res = mysql_query("select * from menu"); $ci = 0; while ($rows = mysql_fetch_array($res)) { $menu[$ci] = $rows; $ci++; } function menu($pai,$menu) { $ci = 0; echo "<ul>\r\n"; while ($ci >= 0) { if ($menu[$ci]['id'] != "" && $menu[$ci]['id'] != null) { if ($menu[$ci]['idpai'] == $pai) { echo "<li>"; echo $menu[$ci]['menu']; echo "</li>\r\n"; menu($menu[$ci]['id'],$menu); } $ci++; } else $ci = -1; } echo "</ul>\r\n"; } menu("0",$menu);
Se a tabela se chamar menu e tiver os campos "id", "idpai" e "menu" só precisares de alterar alterar o mysql_select_db para o nome da tua base de dados. E se tiveres a base de dados com password ou utilizador diferentes também tens de corrigir isso no mysql_connect.
Faz é uma coisa: o campo "id" e "idpai" são inteiros e o "id" alem de PK é AI. Todos os campos são nao nulos.
Depois disto é so adicionares um registo do genero:
1; 0; musica;
2; 1; rock;
Tens o menu rock dentro do musica. Começa com o id em 1 e não em 0. Já nao me lembro porque (lol) mas faz isso. Ah, tem a ver com o idpai. O idpai = 0 quer dizer que está no inicio do menu
Eu estive a ver e ao parece a melhor solução e usar um GET, para depois apanhar no URL da pagina mas nao estou a ver com fazo isso.fazes isso em query string. não precisas de cookies para nada.
cumps