1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Criar menu dinamico

Discussão em 'Web Development' iniciada por rleal, 14 de Maio de 2009. (Respostas: 14; Visualizações: 1524)

  1. rleal

    rleal Power Member

    Como poderei fazer um menu dinâmico, em que as opções do menu estou dentro de um BD? Em HTML.
     
  2. tonebiclas

    tonebiclas Power Member

    "menu" é muito vago...uma lista ?

    já agora, HTML não chega...PHP ? ASP ?
     
  3. Xikinho90

    Xikinho90 Power Member

    Utiliza javascript, vasta procurares no google que tens montes de tutorials para te ajudar!

    Alguma duvida que tenhas pergunta aqui...
     
  4. rleal

    rleal Power Member

  5. tonebiclas

    tonebiclas Power Member

    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 ;)
     
  6. rleal

    rleal Power Member

    O problema e que eu nao consigo imaginar compor exemplo, tiro la 3 opções do sub menu, crio, mas se forem 4, eu nao estou a conseguir imaginar o codigo.
     
  7. Noeljunior

    Noeljunior I fold therefore I AM

    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.

    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);
    
    Isto é pseudo-codigo/algorito simples. Há mais para tornar isto mais eficiente e tudo isso.

    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.
     
    Última edição: 15 de Maio de 2009
  8. rleal

    rleal Power Member

    Obrigado.
     
  9. Noeljunior

    Noeljunior I fold therefore I AM

    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.
     
  10. rleal

    rleal Power Member

    Se poderes facultares isso era um maximo.
     
  11. Noeljunior

    Noeljunior I fold therefore I AM

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

    Agora é só adaptadres isso à tua base de dados. Depois com uns css personalizas esses botoes todos.
    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
     
  12. rleal

    rleal Power Member

    Ok obrigado
    deu muito jeito.
     
  13. rleal

    rleal Power Member

    Com o menu dinâmico, eu crio as ligações para uma nova pagina, mas com eu vou fazer para nova pagina ser a pagina corresponde-te a opção do menu dinâmico. Eu estava a pensar usar Cookies mas não sei se é a melhor escolha?
     
  14. tonebiclas

    tonebiclas Power Member

    fazes isso em query string. não precisas de cookies para nada.

    cumps ;)
     
  15. rleal

    rleal Power Member

    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.
     

Partilhar esta Página